我正在使用 Poweshell 查看特定 SQL 作业的状态。我想将作业名称作为输入传递,例如读取主机或传递变量。当作业名称是 qoutes(Script 1) 中的静态字符串时,该脚本工作正常。如果我通过变量传递它,它就不起作用。
如果我遍历 Jobs 中的每个作业并将作业名称与 where-object 比较字符串进行比较,它工作正常。这不是一个好方法,因为我们有 100 多个带有第二个脚本的工作,但我遇到了错误。错误-
无法索引到空数组。在 C:\Check 状态 test.ps1:22 char:31 + $job = $server.JobServer.Jobs[ <<<< $job_to_check]
+ CategoryInfo : InvalidOperation: (CDSMaint:String) [], RuntimeException + FullyQualifiedErrorId : NullArray
任何人都可以指导我如何让 $job 变量包含名称为 $job_to_check 的作业对象任何提示,非常感谢指导。
脚本 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