Sql-Server
如何將變數傳遞給 Copy-DbaAgentJob 上的 -job?
我正在嘗試查詢一個源實例並將所有失去的作業複製到目標實例中。除了將名稱傳遞給 -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]' `
…這將向您顯示哪些作業已被跳過,因為它們已經存在。