2013-10-24 116 views
0

我正在使用Poweshell查看特定SQL作業的狀態。 我想通過作業名稱作爲輸入,如讀主機或通過變量。 當腳本中的作業名稱是靜態字符串時(腳本1),該腳本正常工作。如果我通過變量傳遞它,它不起作用。當值不爲空時,不能索引爲空數組錯誤

如果我遍歷作業中的每個作業,並比較作業名稱與where-object與字符串的比較,則它可以正常工作。這不是好的方法,因爲我們有100秒的作業 與第二個腳本我收到錯誤。錯誤-

無法索引到空數組中。在C:\檢查狀態test.ps1:22字符:31 + $作業= $ server.JobServer.Jobs [< < < < $ job_to_check]
+ CategoryInfo:InvalidOperation:(CDSMaint:字符串)[],的RuntimeException + FullyQualifiedErrorId:NullArray

任何人都可以指導我怎麼能有一個包含與名稱$ job_to_check 任何暗示的工作對象$ job變量,指導高度讚賞。

腳本1:

$sqlserver="server1" 
#$job_to_check='Job1' 
$script:username='user1' 
$script:pass_word='password'  
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $sqlserver; 
$srv.ConnectionContext.LoginSecure=$false 
$srv.ConnectionContext.set_login($username) 
$srv.ConnectionContext.set_password($pass_word) 
if ($job_to_check -eq $null) 
{ 
    Write-Host "Job is null" 
} 
$job = $server.JobServer.Jobs["Job1"] 
echo $job.Name 

SCRIPT2:

$sqlserver="server1" 
$job_to_check='Job1' 
$script:username='user1' 
$script:pass_word='password' 
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $sqlserver; 
$srv.ConnectionContext.LoginSecure=$false 
$srv.ConnectionContext.set_login($username) 
$srv.ConnectionContext.set_password($pass_word) 
if ($job_to_check -eq $null) 
{ 
    Write-Host "Job is null" 
} 
$job = $server.JobServer.Jobs[$job_to_check] 
echo $job.Name 
+1

錯誤是告訴你,$ server.JobServer.Jobs是一個空數組,但它不可能從你貼什麼爲什麼它可能是空出來。沒有其他的參考$服務器。 – mjolinor

回答

0

我不知道爲什麼腳本1級的作品,但我在劇本2改變(旁邊的服務器名和登錄信息)是下一個到最後一行。 從

$job = $server.JobServer.Jobs[$job_to_check]
$job = $srv.JobServer.Jobs[$job_to_check]

+0

這是錯字它應該是 – anupinder

+0

隨着那1改變您的腳本爲我工作對SQL 2008 R2實例。您確定$ job_to_check變量中的作業是否存在於服務器上,拼寫是否正確? – Bruce

+0

另一點檢查,如果我故意拼錯服務器名稱,我收到您發佈相同的錯誤消息。我沒有檢查登錄名或密碼的問題,但也需要驗證。 – Bruce