[英]How do I get windows registry property values using a PowerShell script run through a .Net PowerShell object?
我正在使用以下 PowerShell 脚本返回有关安装在 PC 上的应用程序的信息:
Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
当我在 Windows Powershell ISE 中运行此脚本时,我看到类似这样的结果:
Hive: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
名称属性
---- -------- 连接管理器系统组件:1
DirectDrawEx
Docker 桌面显示图标:C:\Program Files\Docker\Docker\Docker Desktop Installer.exe
显示名称:Docker 桌面
显示版本:2.1.0.4
版本:39773
安装位置:C:\Program Files\Docker\Docker
不修改:1
无修复:1
出版商:Docker Inc.
频道名称:稳定
ChannelUrl: https://download.docker.com/win/stable/appcast.xml
UninstallString: "C:\Program Files\Docker\Docker\Docker Desktop
Installer.exe”卸载
我从 C#.Net 应用程序调用脚本如下:
using (var ps = PowerShell.Create())
{
ps.Runspace = p_runspace;
ps.AddScript("Get-ChildItem ""HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall""");
IEnumerable<PSObject> commandOutput = ps.Invoke();
}
我如何以编程方式在 C# 中访问在 ISE 中运行脚本时返回的属性(Publisher、DisplayName、DisplayVersion)? 我在我的应用程序中检查了 PSObject 的属性,它们与 ISE 不匹配。
谢谢,约翰B
当使用PowerShell.Invoke()
调用时,从 PowerShell 返回的对象实际上并没有在 882730795402888 的顶层拥有所有相同的成员,PowerShell 的一点“魔力”使它在 88273079441418868188818888 中以这种方式工作.
如果你想要一个属性值,你需要检查返回的PSObject
的Properties
属性:
foreach(PSObject obj in commandOutput) {
Object val = obj.Properties['PropertyName'].Value
}
其中PropertyName
是您想要的属性的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.