检查远程计算机的已安装程序不起作用

时间:2018-09-26 11:31:22

标签: powershell

我正在尝试检查远程计算机上是否安装了特定程序。 该功能在本地计算机上工作正常,但不能在远程计算机上工作 我尝试打开一个会话并在该会话中运行该函数,但没有获得正确的值。

我做错了什么?

Enter-PSSession $b
Is-Installed ( "BigFarmNet 3.3.0 -rc1" )
Exit-PSSession

function Is-Installed( $program ) 
{
    $installed = ""
    if ((Get-WmiObject Win32_OperatingSystem).OSArchitecture = "32-bit")
    {
        $installed = ((Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall") |
    Where-Object { $_.GetValue( "DisplayName" ) -like "*$program*" } ).Length -gt 0;
    }
    else
    {
        $installed = ((Get-ChildItem "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall") |
    Where-Object { $_.GetValue( "DisplayName" ) -like "*$program*" } ).Length -gt 0;
    }
    return $installed;
}

2 个答案:

答案 0 :(得分:3)

您不能在脚本中使用Enter-PSSession。仅在控制台中使用。 如果要在脚本中使用会话,则需要使用Invoke-Command

示例

Invoke-Command -ComputerName "YourComputer" -ScriptBlock {
#YourCode
} 

如果您已经创建了pssession,则还可以将-Session的{​​{1}}参数用于

编辑

如果您想使用本地功能,可以这样做:

invoke-command

答案 1 :(得分:0)

我尝试了您的方法,但仍然遇到相同的异常

Invoke-Command -ComputerName 192.168.128.31 -ScriptBlock { Function:Is-Installed "BigFarmNet 3.3.0 -rc1" } -Credential $Cred -ArgumentList "Is-Installed"

“功能:已安装”一词未被识别为cmdlet的名称, 功能,脚本文件或可操作程序。检查名称的拼写,或者 如果包含路径,请确认路径正确,然后重试。 + CategoryInfo:ObjectNotFound :(函数:已安装:字符串)[ ],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException + PSComputerName:192.168.128.31