我有一个PowerShell脚本,我正在编写以提取特定服务器的所有作业,如
$sqlserver = "Servername"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo') | Out-Null
$srv = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sqlserver
$jobs = $srv.JobServer.Jobs
ForEach ($job in $jobs)
{
$jobname =$Servernaam.replace("\","_") + '_'+ $job.Name.replace(" ","_").replace("\","_").replace("[","_").replace("]","_").replace(".","_").replace(":","_") + ".sql"
$job.Script() | Out-File C:\Users\Desktop\Jobs_from_Server\Orgineel\$jobname
if ($jobs -like '*.dtsx*')
}
我现在获得的代码从服务器获取所有作业并将它们存储在单独的文件中。
问题是我只想在 @command
的字符串中获取包含 .dtsx 的Micrososft SQL Server的作业我试过例如
ForEach ($job in $jobs)
{
$jobname =$Servernaam.replace("\","_") + '_'+ $job.Name.replace(" ","_").replace("\","_").replace("[","_").replace("]","_").replace(".","_").replace(":","_") + ".sql"
$job.Script() | Out-File C:\Users\Desktop\Jobs_from_Server\Orgineel\$jobname
if ($jobs -like '*.dtsx*')
我也尝试过- Contain
并在foreachloop中设置代码,如
ForEach ($job in $jobs |if ($jobs -like '*.dtsx*'))
答案 0 :(得分:2)
您的代码中存在许多拼写错误和其他错误,您可以在其中使用哪些对象。试试这个作为首发。它假定使用SSIS的作业的第一步是SSIS步骤。根据需要进行修改。
此处的关键是检查作业步骤的subsystem
以检测步骤是否与SSIS子系统一起运行。
$sqlserver = "servername"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo') | Out-Null
$srv = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sqlserver
$jobs = $srv.JobServer.Jobs
ForEach ($job in $jobs)
{
if ($Job.JobSteps[0].Subsystem -eq "ssis") {
# Do SSIS stuff
write-output "Found an SSIS job $($job.name)"
}
}