我正在用C#开发WinForms应用程序。我正在尝试使用带有Get-AppxPackage和Get-ItemProperty的PowerShell检索安装在PC上的软件信息(名称、版本)。从Get-ItemProperty检索的信息在作为集合收集后正确存储在DataTable中,并显示在DataGridView中。但是,从Get-AppxPackage检索的Name和Version未收集到集合中,导致计数为0。当然,它们不会显示在DataTable或DataGridView中。
在这两种情况下,加载PowerShell的代码是相同的,我只更改了命令值。为什么不管用?
这里是附加的代码。
private DataTable GetPrograms_1()
{
DataTable programTable_1 = new DataTable();
programTable_1.Columns.Add("Item Name");
programTable_1.Columns.Add("Item Version");
// Get-ItemProperty - UWP
string? command = "Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Select-Object DisplayName, DisplayVersion";
PowerShell powerShell = PowerShell.Create();
powerShell.AddScript(command);
// PowerShell
Collection<PSObject> psObjects = powerShell.Invoke();
// DataTable
foreach (PSObject psObject in psObjects)
{
if (psObject.Properties["DisplayName"] != null && psObject.Properties["DisplayVersion"] != null)
{
string itemName = psObject.Properties["DisplayName"]?.Value?.ToString();
string itemVersion = psObject.Properties["DisplayVersion"]?.Value?.ToString();
programTable_1.Rows.Add(itemName, itemVersion);
}
}
return programTable_1;
}
// UWP data
private DataTable GetPrograms_2()
{
DataTable programTable_2 = new DataTable();
programTable_2.Columns.Add("App Name");
programTable_2.Columns.Add("App Version");
// Get-AppxPackage - UWP
string? command = "Get-AppxPackage -AllUsers | Select-Object Name, Version";
PowerShell powerShell = PowerShell.Create();
powerShell.AddScript(command);
// PowerShell
Collection<PSObject> psObjects = powerShell.Invoke();
// DataTable
foreach (PSObject psObject in psObjects)
{
if (psObject.Properties["Name"]?.Value != null && psObject.Properties["Version"]?.Value != null)
{
string appName = psObject.Properties["Name"]?.Value?.ToString();
string appVersion = psObject.Properties["Version"]?.Value?.ToString();
programTable_2.Rows.Add(appName, appVersion);
}
}
return programTable_2;
}
必须使用Get-AppxPackage。CurrentVersion/Uninstall下的注册表中的数据无法替换从Get-AppxPackage获取的数据。目的是提取有关PC上UWP应用程序的信息。要在Windows 11中从“设置”->“应用程序”->“应用程序和功能”中检索应用程序列表,必须使用Get-AppxPackage。
1条答案
按热度按时间iszxjhcz1#
我采用的方法是直接通过
powershell.exe
执行PowerShell脚本,然后从标准输出中阅读结果。