-1

Poweshell を使用して、特定の SQL ジョブのステータスを表示しています。read-host のような入力としてジョブ名を渡したり、変数を渡したりしたい。ジョブ名が qoutes(Script 1) の静的文字列の場合、スクリプトは正常に機能します。変数を介して渡す場合、機能しません。

Jobs の各ジョブをループし、ジョブ名を where-object 比較で文字列と比較すると、正常に動作します。2 番目のスクリプトで何百ものジョブがあるため、エラーが発生するため、これは良い方法ではありません。エラー-

null 配列にインデックス付けできません。At C:\Check status test.ps1:22 char:31 + $job = $server.JobServer.Jobs[ <<<< $job_to_check]
+ CategoryInfo : InvalidOperation: (CDSMaint:String) [], 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

スクリプト 2:

$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
4

1 に答える 1

-1

スクリプト 1 が機能する理由はわかりませんが、スクリプト 2 で変更したのは (サーバー名とログイン情報のほかに) 最後から 2 行目です。から

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

于 2013-10-24T16:19:35.007 に答える