【问题标题】:Powershell Get-Process cmdlet inside JobJob 中的 Powershell Get-Process cmdlet
【发布时间】:2013-12-19 07:48:50
【问题描述】:

当我在作业中使用 Powershell 中的 Get-Process 命令时遇到问题。

我想通过PID获取一个进程,所以我正在执行以下操作:

$MyProcess = 获取进程 | Where-Object { $_.Id -eq $parentProcessID }

上面,当它作为命令从 Powershell 脚本调用时,返回给我预期的过程。

如果我在 Start-Job{} 块中使用完全相同的命令,那么它会给我 null,即使对于正在运行的进程也是如此。例如:

开始工作{ $parentProcessID = $args $MyProcess = 获取进程 | Where-Object { $_.Id -eq $parentProcessID } if($MyProcess -eq $null) { echo "没有返回" } } -ArgumentList "$parentProcessID"

这里有什么我遗漏的吗?有没有人遇到过类似的情况?

感谢任何见解。

谢谢。

【问题讨论】:

    标签: powershell scripting cmdlets


    【解决方案1】:

    $args 是一个数组,如果你仍然想使用,请确保选择它的第一个元素:

    $parentProcessID = $args[0]
    

    另外,Get-Process 有一个 Id 参数,不需要使用 Where-Object cmdlet:

    Get-Process -Id $parentProcessID 
    

    Id 参数的另一个优点是它需要一个 Id 数组,因此如果您将 $args 的值按原样传递给它,它就会起作用。

    您也可以为脚本块使用名称参数,而不是使用$args

    Start-Job {
        param([int[]]$procid)
    
        $MyProcess = Get-Process -Id $procid
    
    (...)
    

    【讨论】:

    • 谢谢谢伊·利维。你是绝对正确的。我没有意识到我在变量中传递了数组,因为我正在打印它并且我只能看到一个值(因为我只传递了一个值。愚蠢的我)。我将更改 Get-Process 以使用 -Id,因为它更干净。非常感谢。
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2013-03-01
    • 2015-06-21
    • 1970-01-01
    • 2017-02-04
    • 2020-04-27
    相关资源
    最近更新 更多