我有一个POWERSHELL脚本来检查是否存在预定义的软件列表:
$SoftList = "Microsoft Visual C++ 2005 Redistributable","TotoInexistant","GIMP 2.6.11"
定义了我想要检查的软件列表。
我使用循环将上面列表中每个软件的名称与cmdlet的resut进行比较,如下所示:
foreach($i in $SoftList)
{
$x = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
select DisplayName, Publisher, InstallDate | Where-Object {$_.DisplayName -like $i}
$x
$x.DisplayName >> ListOf.txt # or we can to display it on screen
}
我面临的问题是 $ x.DisplayName 没有为“ Microsoft Visual C ++ 2005 Redistributable ”写下名称。 如何从 $ x 变量中提取软件名称?
答案 0 :(得分:0)
你能试试这个版本吗?它正在使用您的代码,以及Arco的修复程序。
$SoftList = "Microsoft Visual C++ 2005 Redistributable","TotoInexistant","GIMP"
foreach($i in $SoftList)
{
$x = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
select DisplayName, Publisher, InstallDate | Where-Object {$_.DisplayName -like $("$i*")}
$x.DisplayName
$x.DisplayName | Out-File "ListOf.txt" -Append -Force
}
我得到的输出是:
Microsoft Visual C++ 2005 Redistributable (x64)
GIMP 2.8.14
答案 1 :(得分:0)
感谢你的HElp,
我找到了解决方案,实际上Microsoft Visual C++ 2005 Redistributable
的$ x变量是一个数组,可能是因为它安装了两次,所以
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
select DisplayName, Publisher, InstallDate
返回包含Microsoft Visual C++ 2005 Redistributable
信息的两行。
在这种情况下获取displayName我调整我的脚本如下:
if($x-is [array])
{
for($k=0;$k-le $x.length-1;$k++)
{
$x[$k].DisplayName
}
}