繁体   English   中英

如何使用通过 a.Net PowerShell object 运行的 PowerShell 脚本获取 windows 注册表属性值?

[英]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 中以这种方式工作.

如果你想要一个属性值,你需要检查返回的PSObjectProperties属性:

foreach(PSObject obj in commandOutput) {
  Object val = obj.Properties['PropertyName'].Value
}

其中PropertyName是您想要的属性的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM