PowerShell 技能连载 - 远程获取已安装的软件列表
在前一个技能中,我们介绍了 Get-Software
函数,它可以获取本地计算机已安装的软件。
如果您在远程系统上已经安装了 PowerShell 远程操作(在 Windows Server 2012 及以上版本中默认是开启的),并且如果您拥有合适的权限,请试试这个增强的版本。它同时支持本地和远程调用:
#requires -Version 2
function Get-Software
{
param
(
[string]
$DisplayName='*',
[string]
$UninstallString='*',
[string[]]
$ComputerName
)
[scriptblock]$code =
{
param
(
[string]
$DisplayName='*',
[string]
$UninstallString='*'
)
$keys = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
Get-ItemProperty -Path $keys |
Where-Object { $_.DisplayName } |
Select-Object -Property DisplayName, DisplayVersion, UninstallString |
Where-Object { $_.DisplayName -like $DisplayName } |
Where-Object { $_.UninstallString -like $UninstallString }
}
if ($PSBoundParameters.ContainsKey('ComputerName'))
{
Invoke-Command -ScriptBlock $code -ComputerName $ComputerName -ArgumentList $DisplayName, $UninstallString
}
else
{
& $code -DisplayName $DisplayName -UninstallString $UninstallString
}
}
请注意这个函数如何将查找软件的代码包裹在代码块中。接下来,它将检测 $PSBoundParameters
来判断用户是否传入了 -ComputerName
参数。如果没有传入,该代码将在本地执行。
否则,Invoke-Command
将在指定的远程计算机(支持多台)上运行这段代码。在这个例子中,Invoke-Command
将过滤参数传递给远程代码。