Sql-Server

如何將變數傳遞給 Copy-DbaAgentJob 上的 -job?

  • April 8, 2020

我正在嘗試查詢一個源實例並將所有失去的作業複製到目標實例中。除了將名稱傳遞給 -job 之外,一切似乎都有效。任何人都可以建議修復或指出我正確的方向嗎?

$dest = "Dest\Instance"
$Source = "Source\Instance"
$MissingJob = Invoke-DbaQuery -SqlInstance $Source -ReadOnly -Query "
use msdb

select name
from dbo.sysjobs
where name COLLATE Latin1_General_CI_AS not in (select name
from [Dest\Instance].[msdb].[dbo].[sysjobs]
)"

foreach ($Name in $MissingJob){
Copy-DbaAgentJob -Source NCCSQLDEVW2K162\NCCSQL2017DBA01 -Destination $dest 
-Job $Name -SourceSqlCredential $cred -Force 
}

無需使用連結伺服器查詢重新發明輪子。dbatools 還提供Get-DbaAgentJob列舉兩個代理上的作業的功能。同樣,該$Job參數接受一個數組作為輸入,這意味著您不需要 for 循環。假設作業名稱是範例中的鍵控屬性,您可以嘗試以下操作。

$sourceJobs = Get-DbaAgentJob -SqlInstance '[Source\Instance]'
$destJobs   = Get-DbaAgentJob -SqlInstance '[Dest\Instance]'

$missingJobs = $sourceJobs | Where {
   $_.Name -notin $destJobs.Name
}

Copy-DbaAgentJob `
   -Source '[Source\Instance]' `
   -Destination '[Dest\Instance]' `
   -Job $missingJobs

雖然嚴格來說,Copy-DbaAgentJob已經檢查了重複項,因此您可以通過完全省略-Job參數並執行類似…

Copy-DbaAgentJob `
   -Source '[Source\Instance]' `
   -Destination '[Dest\Instance]' `

…這將向您顯示哪些作業已被跳過,因為它們已經存在。

顯示 Copy-DbaAgentJob 輸出的 powershell 會話

引用自:https://dba.stackexchange.com/questions/264562