使用POWERShell CmdLet列出已安装的软件并提取软件名称

时间:2014-11-26 16:44:38

标签: powershell scripting cmdlet

我有一个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 变量中提取软件名称?

2 个答案:

答案 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
   } 
}