gpt4 book ai didi

c# - 在 C# 问题中执行 Powershell 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:29 26 4
gpt4 key购买 nike

我在 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()

现在我在解析脚本时遇到了问题。当使用 Invoke 告诉 Powershell 直接运行脚本时,它运行完美(本地)。但我不想让脚本保留在应用程序目录中。

所以我尝试像第一个一样运行脚本:

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# 的新手;可能你训练有素的眼睛看到更多。 :)

提前致谢,克里斯

附言:here is the tutorial that I used

最佳答案

@wp78de:感谢您的回答。但仅此一点并不能解决问题。但是,Verbatim String 对我帮助很大。

我现在已经做到了。现在我可以触发当前登录用户的 UserPolicy。

代码是:

if (UserPolBox.IsChecked ?? true)
{
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var com = @"$sid = (Get-WmiObject -Computername '" + ComputerBox.Text + @"' -query ""SELECT UserSID FROM CCM_UserLogonEvents WHERE LogoffTime = NULL"" -namespace ""ROOT\ccm"").UserSID.replace('-','_');";
var sched = @"$sched = ([wmi]""\\" + ComputerBox.Text + @"\root\ccm\Policy\$sid\ActualConfig:CCM_Scheduler_ScheduledMessage.ScheduledMessageID='{00000000-0000-0000-0000-000000000026}'"");";
var triggers = @"$sched.Triggers=@('SimpleInterval;Minutes=1;MaxRandomDelayMinutes=0');";
var put = @"$sched.Put()";

PowerShellInstance.AddScript(com + sched + triggers + put);

PowerShellInstance.Streams.Error.Clear();
PowerShellInstance.Streams.Warning.Clear();
var result = PowerShellInstance.Invoke();
MessageBox.Show(PowerShellInstance.Streams.Error.Count().ToString() + " error counts");

foreach (var errorRecord in PowerShellInstance.Streams.Error)
{
MessageBox.Show(errorRecord.ToString() + "first - error");
}
}
}

关于c# - 在 C# 问题中执行 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com