【发布时间】:2018-07-31 11:28:13
【问题描述】:
我有一个应用程序,它允许用户在 Win 10 IoT 机器上配置基本的 WMI 设置。
我目前正在努力阅读所有已启用的 WEKF_PredefinedKey 设置。 我只是在运行一个脚本,我将它作为字符串添加到名为 ReadEnabledKeys 的项目设置中:
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned;
$keys = Get-WMIObject -class WEKF_PredefinedKey @CommonParams
foreach($k in $keys)
{
if($k.Enabled -eq $false)
{
"$k";
}
}
我在 C# 代码中的调用如下所示(注意:使用 System.Management.Automation):
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript(Properties.Settings.Default.ReadEnabledKeys);
var result = PowerShellInstance.Invoke();
}
我的变量结果将始终为空。 如果我直接在 Powershell 中运行脚本,输出就很好(所有快捷方式,当前未禁用)。
我使用统一写入过滤器编写了类似的程序,我在其中启用和禁用它:
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned;
$objUWFInstance = Get-WMIObject -namespace $NAMESPACE -class UWF_Filter;
$retval = $objUWFInstance.Enable();
if ($retval.ReturnValue -eq 0) {"Unified Write Filter will be enabled after the next system restart."}
else {"Unknown Error: " + "{0:x0}" -f $retval.ReturnValue}
还有 C# 调用:
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript(Properties.Settings.Default.EnableUWF);
// [0] = result or error
var result = PowerShellInstance.Invoke();
if (result[0].ToString().ToLower().Contains("enabled"))
MessageBox.Show(result[0].ToString(), "", MessageBoxButton.OK, MessageBoxImage.Information);
else
MessageBox.Show("Error when enabling the filter! " + Environment.NewLine + result[0].ToString(), "",
MessageBoxButton.OK, MessageBoxImage.Error);
}
这里我的结果变量将被预期的字符串填充。
我已尝试 Write-Host $k,因为我怀疑流有问题,但这没有任何成功。
Powershell 中的输出如下所示:
PS C:\Users\Administrator> C:\Users\Administrator\Desktop\Newfolder\Untitled1.ps1
\\DESKTOP-RMGOBMG\root\standardcimv2\embedded:WEKF_PredefinedKey.Id="Alt"\\DESKTOP-RMGOBMG\root\standardcimv2\embedded:WEKF_PredefinedKey.Id="Application"
\\DESKTOP-RMGOBMG\root\standardcimv2\embedded:WEKF_PredefinedKey.Id="Ctrl+Esc"
\\DESKTOP-RMGOBMG\root\standardcimv2\embedded:WEKF_PredefinedKey.Id="Ctrl+F4"
\\DESKTOP-RMGOBMG\root\standardcimv2\embedded:WEKF_PredefinedKey.Id="Ctrl+Tab"
.
.
.
谁能告诉我,问题是什么?
【问题讨论】:
-
Properties.Settings.Default.ReadEnabledKeys这是在哪里定义的?为什么在 powershell 中这样做而不是通过 C# 查询 wmi? -
我编辑了问题,但是这个属性只是项目设置中的一个字符串,它包含我要执行的脚本的内容。
标签: c# powershell wmi