首页 > 解决方案 > Powershell将管道返回值存储到变量

问题描述

我有一个 PowerShell 函数,它读取我的 SQL 代理作业的状态。

function get-SQLJobStatus
{
    param(
        [string]$server, 
        [string]$jobName
    )

    [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null

    $srv = New-Object Microsoft.SqlServer.Management.SMO.Server($server)
    if($jobName)
    {
        $srv.JobServer.Jobs | where {$_.Name -match $jobName} | Select CurrentRunStatus
    }
}

如果我运行这个函数,返回如下所示

CurrentRunStatus
________________
Idle

我想要做的是运行这个get-SQLJobStatus函数并检查是否CurrentRunStatus == Idle. 似乎我不能只将这些返回值存储到变量中,所以我被卡住了。

任何想法?

标签: sql-serverpowershell

解决方案


由于您的函数返回一个具有该属性的对象,您可以使用返回的函数调用中的CurrentRunStatus成员访问 ( ) 来检查它:.propertyName

if ((get-SQLJobStatus -server 'servername' -jobname 'jobname').CurrentRunStatus -eq 'Idle') {
    # the job is idle. run code here
}
else {
    # the job is not idle. run code here
}

如果你想存储函数调用的输出,你仍然可以像上面一样运行类似的检查:

$status = get-SQLJobStatus -server 'servername' -jobname 'jobname'
if ($status.CurrentRunStatus -eq 'Idle') {
    # the job is idle. run code here
}
else {
    # the job is not idle. run code here
}

顺便说一句,您的$_.Name -match $jobName比较可以返回多个对象。这是因为-match使用正则表达式并且您的$jobname值可能是未锚定的。要返回完全匹配,您可以选择$_.Name -eq $jobName.


推荐阅读