【问题标题】:Cannot index into a null array error when value is not null值不为空时无法索引到空数组错误
【发布时间】:2013-10-24 15:57:09
【问题描述】:

我正在使用 Poweshell 查看特定 SQL 作业的状态。 我想将作业名称作为输入传递,例如读取主机或传递变量。 当作业名称是 qoutes(Script 1) 中的静态字符串时,该脚本工作正常。如果我通过变量传递它,它就不起作用。

如果我遍历 Jobs 中的每个作业并将作业名称与 where-object 比较字符串进行比较,它工作正常。这不是好方法,因为我们有 100 多个工作岗位 使用第二个脚本我收到错误。错误-

无法索引到空数组。在 C:\检查状态 test.ps1:22 char:31 + $job = $server.JobServer.Jobs[ + 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

【问题讨论】:

  • 错误告诉你 $server.JobServer.Jobs 是一个空数组,但是从你发布的内容中无法判断它为什么可能是空的。没有其他对 $server 的引用。

标签: powershell sql-job


【解决方案1】:

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

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

【讨论】:

  • 应该是错字
  • 通过 1 次更改,您的脚本对 SQL 2008 R2 实例有效。您确定 $job_to_check 变量中的作业存在于服务器上并且拼写正确吗?
  • 另一点要检查,如果我故意拼错服务器名称,我会收到与您发布的相同的错误消息。我没有检查登录名或密码是否有问题,但也需要验证。
  • 拼写正确,在传递给 Jobs 之前我也可以看到它的值,错误是无法索引到空数组。
猜你喜欢
  • 2017-11-07
  • 2018-11-27
  • 2018-09-14
  • 2017-07-01
  • 1970-01-01
  • 2016-07-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多