-1

我正在使用 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
4

1 回答 1

-1

我不确定为什么脚本 1 有效,但我在脚本 2 中所做的更改(除了服务器名称和登录信息)是倒数第二行。从

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

于 2013-10-24T16:19:35.007 回答