[英]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.