我正在尝试检查远程计算机上是否安装了特定程序。 该功能在本地计算机上工作正常,但不能在远程计算机上工作 我尝试打开一个会话并在该会话中运行该函数,但没有获得正确的值。
我做错了什么?
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;
}
答案 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