【发布时间】:2014-11-27 18:41:06
【问题描述】:
我有一个 POWERSHELL 脚本来检查是否存在预定义的软件列表:
$SoftList = "Microsoft Visual C++ 2005 Redistributable","TotoInexistant","GIMP 2.6.11" 定义我要检查的软件列表。
我使用一个循环来比较上面列表中每个软件的名称,以便 cmdlet 的结果如下:
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 变量中提取软件名称?
【问题讨论】:
-
你检查过输出的包吗?我没有安装它,所以我不能为你做。只需运行
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,手动查看哪个包是mvc++ 2005,看看是否有包含名称的属性 -
是的,已经检查过了。事实上,当我使用 $x 显示它时,Displayname、publisher 和 installDate 都会显示在屏幕上。问题是当我尝试使用 $x.DisplayName 访问它时
-
嗯,这很奇怪,所以 $x 包含一个属性 Displayname,它有一个值但 $x.Displayname 不输出它?
-
exactly $x.displayName 适用于 GIMP 和其他软件,但对于 Microsoft Visual C++ 2005 Redistributable 则失败。也许是长度问题!
-
在我的系统上,该软件称为
Microsoft Visual C++ 2005 Redistributable (x64),这就是它不会显示的原因。请参阅 Arco 的回答。
标签: powershell scripting powershell-cmdlet