如何使用Powershell

时间:2016-10-05 13:42:25

标签: sql-server powershell

我有一个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*'))

1 个答案:

答案 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)"
    }
  }