【发布时间】:2018-02-22 12:22:41
【问题描述】:
VS (C#) 中的 Powershell 脚本有问题。
总结:我为 Microsoft System Center 的特定客户端操作构建了一个小工具。
以下完美运行:
if (MachPolBox.IsChecked ?? true)
{
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("Invoke-WMIMethod -ComputerName " + ComputerBox.Text + " -Namespace root\\ccm -Class SMS_CLIENT -Name TriggerSchedule " + MachinePolicy);
PowerShellInstance.Invoke();
MessageBlock.Foreground = Brushes.White;
MessageBlock.Text = "running...";
if (PowerShellInstance.HadErrors)
{
MessageBlock.Foreground = Brushes.Red;
MessageBlock.Text = "Fehler... Programm als Administrator ausgeführt? Computername richtig?";
}
else
{
MessageBlock.Foreground = Brushes.White;
MessageBlock.Text = "Erfolgreich";
}
}
}
其中一项操作将触发对用户政策的评估。问题是:远程运行脚本不会触发客户端上登录用户的操作。
这是我在 PowerShell 中找到的解决方法:
$sid = ( get-wmiobject -query "SELECT UserSID FROM CCM_UserLogonEvents WHERE LogoffTime = NULL" -namespace "ROOT\ccm").UserSID.replace('-','_');
$sched=([wmi]"root\ccm\Policy\$sid\ActualConfig:CCM_Scheduler_ScheduledMessage.ScheduledMessageID='{00000000-0000-0000-0000-000000000026}'");
$sched.Triggers=@('SimpleInterval;Minutes=1;MaxRandomDelayMinutes=0');
$sched.Put()
现在我在解析脚本时遇到问题。当告诉 Powershell 直接运行脚本时,使用Invoke,它运行完美(本地)。但我不想让脚本保留在应用程序目录中。
所以我尝试像第一个一样运行脚本:
PowerShellInstance.AddScript("$sid = (get-wmiobject -query \"SELECT UserSID FROM CCM_UserLogonEvents WHERE LogoffTime = NULL\" -namespace \"ROOT\\ccm\").UserSID.replace('-','_'); $sched=([wmi]\"root\\ccm\\Policy\\$sid\\ActualConfig: CCM_Scheduler_ScheduledMessage.ScheduledMessageID = '{00000000-0000-0000-0000-000000000026}'\"); $sched.Triggers=@('SimpleInterval;Minutes=1;MaxRandomDelayMinutes=0'); $sched.Put()");
但它不会运行(可能是语法错误)。
我对 VS 和 C# 很陌生;可能你训练有素的眼睛看得更多。 :)
提前致谢,克里斯
【问题讨论】:
标签: c# visual-studio powershell