2013-10-24 86 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