2016-10-28 21 views
0

私は、フォルダに保存したジョブを比較し、それらの名前をサーバ上で比較するスクリプトを作成しました。それは、サーバ上で現在ですが、フォルダに保存されていないすべてのジョブのリストを示して実行した後1つのパラメータに複数の値を設定する

$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

私の問題は、現在、それだけで実行された最後のジョブを無視するということですトラフthe foreach ($file in $files)

たとえば、testA.sqlとTestB.SQLというファイルがあり、サーバーにはtestA、TestB、TestCという名前のジョブがあります。

  • TESTC < =

実際の結果は示しています:示さ 結果がなければならない

  • 種皮< =
  • TESTC < =

私の質問は、私はすべてのジョブが$SqlServer1JobListing $SqlServer2JobListingの間に一致が示されていないように一つのパラメータSqlServer2JobListingでトラフforeach ($file in $files)行くすべての値を設定することができる方法である

答えて

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ループの後、あなたはあなたのような最後のものだけが前に持っていたのではなく、すべてのアイテムのコレクションを取得します。

+0

こんにちは、このコードはうまくいきますが、一致しないパッケージのリストではなく、一致するリストを示しています。 – Jarno343

関連する問題