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

使用POWERShell CmdLet列出已安装的软件并提取软件名称,powershell,scripting,cmdlet,Powershell,Scripting,Cmdlet,我有一个POWERSHELL脚本来检查是否存在预定义的软件列表: $SufftList=微软Visual C++ 2005可重新分发,totoNovialTime:GIMP 2.611定义IM要查看的软件列表。 我使用循环将上面列表中每个软件的名称与cmdlet的resut进行比较,如下所示: foreach($i in $SoftList) { $x = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Unin

我有一个POWERSHELL脚本来检查是否存在预定义的软件列表: $SufftList=微软Visual C++ 2005可重新分发,totoNovialTime:GIMP 2.611定义IM要查看的软件列表。 我使用循环将上面列表中每个软件的名称与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.DelpScript名称不为微软Visual C++ 2005重新分配名称。
如何从$x变量中提取软件名

你能试试这个版本吗?它正在使用您的代码和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
谢谢你的帮助, 我找到了解决方案,实际上,微软Visual C++ 2005可重新分配的X变量是一个数组,可能是因为它安装了两次, 获取ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*| 选择DisplayName、Publisher、InstallDate 返回包含微软Visual C++ 2005的信息的两行可重新分配。 在这种情况下,为了获得displayName,我调整脚本如下:

 if($x-is [array])
 {
   for($k=0;$k-le $x.length-1;$k++)
   {
     $x[$k].DisplayName
   } 
}

你检查过包装的输出了吗?我没有安装,所以我不能为你做。只需运行Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,手动查看哪个软件包是mvc++2005,并查看是否有包含名称的属性Yes。事实上,当我使用$x显示它时,屏幕上会显示Displayname、publisher和installDate。问题是,当我尝试用$x.DePasaNeMHMM访问它时,这是奇怪的,所以X包含了一个属性DISPLAYND,这个值有一个值,但是$x.DelpSoad没有输出它。精确的$x.DelpDeNeX对于GIMP和其他软件来说是很好的,但是它在微软Visual C++ 2005中是可重新分配的。也许是长度的问题!!在我的系统中,软件被称为微软Visual C++ 2005可重新分配的X64,这就是它为什么不显示的原因。看到ARCO的回答。当我用64位PosiS壳使用这个版本时,我得到了输出:微软Visual C++ 2005可重新分配的X64。它看起来不错,因为我没有安装64位版本。然而,在32位PoSeBar中,它不显示MyVisualVisual C++ 2005可重新分发的X64 I,但不知道何时删除$x变量。微软VISAUL C++重新分配是当前TWICE。也许这阻止了用命令$x.DelpScript名获取名称。