在一个参数

时间:2016-10-28 11:17:21

标签: powershell

我编写了以下脚本来比较我保存在文件夹中的作业,并在服务器上按名称进行比较。

$submaporiginal = 'D:\Jobs_from_Server\TEST_Jobs_Aangepast'

$SqlServer1Name = "servername"

$SqlServer1 = New-Object Microsoft.SqlServer.Management.Smo.Server($SqlServer1Name)

$files = Get-ChildItem $submaporiginal *.sql 

$SqlServer1JobListing = $SqlServer1.JobServer.Jobs | 
    Select-Object -ExpandProperty Name

foreach ($file in $files) 
    {
    $stap1 =  $file.Name  
    $locatiedtsx = $stap1.IndexOf("_goed")
    $SqlServer2JobListing = $stap1.Substring(0,$locatiedtsx)
    }

Compare-Object $SqlServer1JobListing $SqlServer2JobListing 
    {
    if ($_.SideIndicator -eq "<=") 
        {Write-Host $_}
    } 

运行后,它会显示一个列表,其中包含当前服务器上但尚未保存在文件夹中的所有作业:TEST_Jobs_Aangepast

我的问题是,目前它只会忽略已通过foreach ($file in $files)

运行的上一个作业

对于地图中的例子,文件是TestA.sql和TestB.SQL,而服务器有一个名为testA,TestB和TestC的作业。 显示的结果应该是:

  • TestC&lt; =

但实际结果显示:

  • TestA&lt; =
  • TestC&lt; =

我的问题是如何在一个参数foreach ($file in $files)中设置SqlServer2JobListing的所有值,以便不显示$SqlServer1JobListing $SqlServer2JobListing之间匹配的所有作业

1 个答案:

答案 0 :(得分:2)

您的问题是您始终重新分配$SqlServer2JobListing变量,而是需要向数组或列表添加值。像这样:

$SqlServer1JobListing = New-Object System.Collections.ArrayList
foreach ($file in $files) 
{
    $stap1 =  $file.Name  
    $locatiedtsx = $stap1.IndexOf("_goed")
    $SqlServer1JobListing.Add($stap1.Substring(0,$locatiedtsx))
}

这样,在foreach循环后,您将获得所有项目的集合,而不是像之前一样的最后一项。