簡體   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