get-process产品版远程计算机

时间:2017-05-26 16:50:20

标签: powershell

如果我在当地这样做,我会得到所有信息:

stage.setOnHidden(event -> {
    // TODO: release resources here
});

但是,如果我在远程计算机上执行此操作,则只获取进程名称,所有其他字段均为空白。有谁知道为什么或如何获得相同的信息。我正在使用域管理员凭据,因此我应该可以访问该信息。

get-process | select-object name,fileversion,company

1 个答案:

答案 0 :(得分:0)

您可以尝试此解决方案:

$Computername = 'Remotehost'

$Session = New-CimSession -ComputerName $Computername

$process = Get-CimInstance -ClassName Win32_Process -CimSession $Session

$col = New-Object System.Collections.ArrayList

foreach ($n in $process){

    $exePath = $null
    $ExeInfo = $null

    $exePath = $n.ExecutablePath -Replace '\\','\\'

    $ExeInfo = Get-CimInstance -ClassName Cim_DataFile -Filter "Name = '$exePath'" -ErrorAction SilentlyContinue

    [void]$col.add([PSCustomObject]@{
        Name = $n.name
        FileVersion = $ExeInfo.Version
        Company = $ExeInfo.Manufacturer
        PSComputername = $n.PSComputername
    })
}
Remove-Cimsession $session
$col

更新

我减少了代码以仅检查一个进程。我断言与客户端计算机上的进程具有相同名称的引用文件。您可以根据需要进行更改。

您可以在$computername指定多台计算机,因此您无需反复运行代码。

#region Reference file

$RefFile = Get-item "\\x123\c$\program files\prog\winagent\file.exe"

#endregion

#region remote file

[string[]]$Computername = 'Remotehost1', 'Remotehost2'
$Processname = $RefFile.Name

foreach ($n in $Computername) {
    $Session = New-CimSession -ComputerName $n
    $process = Get-CimInstance -ClassName Win32_Process -CimSession $Session -Filter "name = '$Processname'"
    $exePath = $process.ExecutablePath -Replace '\\', '\\'
    $ExeInfo = Get-CimInstance -ClassName Cim_DataFile -Filter "Name = '$exePath'" -ErrorAction SilentlyContinue
    [PSCustomObject]@{
            Name           = $Processname
            FileVersion    = $ExeInfo.Version
            Company        = $ExeInfo.Manufacturer
            PSComputername = $n
        }
    Remove-Cimsession $session
}

#endregion