Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用通过.Net PowerShell对象运行的PowerShell脚本获取windows注册表属性值?_C#_.net_Powershell - Fatal编程技术网

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

C# 如何使用通过.Net PowerShell对象运行的PowerShell脚本获取windows注册表属性值?,c#,.net,powershell,C#,.net,Powershell,我正在使用以下PowerShell脚本返回有关安装在PC上的应用程序的信息: Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall" 当我在Windows Powershell ISE中运行此脚本时,我会看到如下结果: 名称属性 ---------连接管理器系统组件:1 DirectDrawEx Docker桌面显示图标:C:\Program Files\Docker\Docker\

我正在使用以下PowerShell脚本返回有关安装在PC上的应用程序的信息:

Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
当我在Windows Powershell ISE中运行此脚本时,我会看到如下结果:

名称属性

---------连接管理器系统组件:1
DirectDrawEx
Docker桌面显示图标:C:\Program Files\Docker\Docker\Docker Desktop Installer.exe
显示名称:Docker桌面
显示版本:2.1.0.4
版本:39773
安装位置:C:\Program Files\Docker\Docker
NoModify:1
诺雷帕尔:1
出版商:Docker Inc.
频道名称:稳定
频道URL:
卸载字符串:“C:\Program Files\Docker\Docker\Docker桌面
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();
}
使用(var ps=PowerShell.Create())
{
ps.运行空间=p_运行空间;
ps.AddScript(“Get ChildItem”“HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall”“”;
IEnumerable commandOutput=ps.Invoke();
}
如何以编程方式在C中访问在ISE中运行脚本时返回的脚本(Publisher、DisplayName、DisplayVersion)时返回的属性? 我在我的应用程序中检查了PSObject的属性,它们与ISE不匹配


谢谢,当使用调用时,从PowerShell返回的JohnB

对象实际上并不在对象的顶层具有所有相同的成员,有点PowerShell“魔力”使它在PowerShell会话中以这种方式工作

如果需要属性值,则需要检查返回的属性的
属性

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

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

为什么不直接在C#?itsme86中查询它们?我们正在使用PowerShell脚本,并通过.Net应用程序在远程端点上运行它们。不能直接使用C#库。请在命令行中使用:REG QUERY KeyName。见:
using (var ps = PowerShell.Create())
{
   ps.Runspace = p_runspace;
   ps.AddScript("Get-ChildItem ""HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall""");
   IEnumerable<PSObject> commandOutput = ps.Invoke();
}