我正在使用Poweshell查看特定SQL作业的状态。 我想传递作业名称作为输入,如读取主机或传递变量。 当作业名称是qoutes(脚本1)中的静态字符串时,脚本工作正常。如果我通过变量传递它,它就不起作用。
如果我遍历Jobs中的每个作业并将作业名称与where-object比较与字符串进行比较,那么它可以正常工作。这不是好事,因为我们有100个工作岗位 第二个脚本我收到错误。错误 -
无法索引到空数组。在C:\检查状态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
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
答案 0 :(得分:0)
我不确定脚本1的工作原理,但我在脚本2中更改的内容(服务器名称和登录信息旁边)是最后一行的旁边。 来自
$job = $server.JobServer.Jobs[$job_to_check]
致$job = $srv.JobServer.Jobs[$job_to_check]