Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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# 如果未至少手动登录一次,则无法远程获取计算机的组策略_C#_Powershell_Winrm_Group Policy - Fatal编程技术网

C# 如果未至少手动登录一次,则无法远程获取计算机的组策略

C# 如果未至少手动登录一次,则无法远程获取计算机的组策略,c#,powershell,winrm,group-policy,C#,Powershell,Winrm,Group Policy,我使用System.Management.Automation编写了一个C桌面应用程序,它可以远程连接到我们网络中的机器,并进行诊断,以确保它们都是按照我们组织的策略配置的。 PSCredential Credentials = new PSCredential(Username, Password); WSManConnectionInfo ThisConnection = new WSManConnectionInfo(false, ThisSystem.IpName, 5985, "/ws

我使用System.Management.Automation编写了一个C桌面应用程序,它可以远程连接到我们网络中的机器,并进行诊断,以确保它们都是按照我们组织的策略配置的。
PSCredential Credentials = new PSCredential(Username, Password);
WSManConnectionInfo ThisConnection = new WSManConnectionInfo(false, ThisSystem.IpName, 5985, "/wsman",
    "http://schemas.microsoft.com/powershell/Microsoft.PowerShell", Credentials);

using (Runspace ThisRunspace = RunspaceFactory.CreateRunspace(ThisConnection))
{
    ThisRunspace.Open();
    using (PowerShell ThisShell = PowerShell.Create())
    {
        ThisShell.Runspace = ThisRunspace;
要获取组策略中的横幅,它执行以下代码以执行powershell命令

        ThisShell.Commands.Clear();
        ThisShell.AddScript("echo N | gpupdate /force");
        ThisShell.AddScript("gpresult /h c:\\Windows\\Temp\\gpdata.html /F");
        ThisShell.AddScript("type c:\\Windows\\Temp\\gpdata.html");
        List<String> GroupPolicy = ThisShell.Invoke().Select(x => x.ToString()).ToList();
它应该使用该计算机的组策略数据创建html文件。只要我用同样的凭证手动登录到那台机器上,它就会这样做。如果我没有,我什么也得不到。我像这样运行其他powershell命令,结果很好,但由于某些原因,此用于获取组策略的命令仅适用于我至少使用远程桌面手动登录过一次的计算机,并且要检查数千台服务器,这不是一个选项。 我想可能是登录为我正在使用的管理员帐户手动创建了主文件夹,但这不可能,因为我正在获取通过管道传输到文件的其他powershell命令的结果。我认为可能是登录手动更新了该机器上的组策略,但我认为这也不可能,因为我添加了gpupdate/force,并且没有任何区别。 有什么线索吗?

来自:

由于可以将重叠策略设置应用于任何计算机或用户,因此当用户登录时,“组策略”功能将生成一组策略设置。gpresult显示用户登录时在计算机上为指定用户强制执行的策略设置的结果集


由于您讨论的是在服务器上强制执行策略,通常情况下不应让用户登录,因此您可以尝试添加/scope computer选项以仅获取机器策略,该策略应始终可用。

Dude!这是非常有希望的。明天回到办公室之前我不能试一下,但我会早点去试一试。迫不及待。。。不管怎样,你都会收到我的来信。再次感谢!该死!它不起作用。我认为您完全正确,问题是永远不会创建RSoP策略结果集,因为它只在用户登录时创建。但即使有范围限制,我猜它仍然在关注RSoP,而没有看到任何创建的内容。两个选项-找到一种不同的方式来获取横幅,除了gpresult,但我看不出还有什么比gpresult和使用RSoP更好的方法来解决重叠策略的问题,或者让我的应用程序生成远程桌面登录。我想是时候调查一下了。@AgapwIesu我在一台计算机上使用远程gpresult/S[system]/r/scope计算机进行了测试,没有scope的交互使用由于从未登录而导致错误,也许在本地运行它会导致不同的问题?@AgapwIesu我使用psexec进行了测试,但在工作时没有问题-您确定添加/scope计算机后您的问题仍然相同吗?如果我正确理解System.Management.Automation库以及我对它所做的操作,我实际上正在连接到它,并在该系统上本地运行gpresult。如果我正确理解了您告诉我的内容,我将需要使用系统参数从不同的机器上运行gpresult。这是非常可行的。我将试一试。由于WSManConnectionInfo默认情况下应自行创建用户配置文件,如果您等待(例如30分钟)并在同一台远程计算机上再次调用该命令,会发生什么情况?我想知道这是否是一个时间问题,因为在第一次登录时创建用户配置文件可能需要一些时间…如果答案没有帮助,请尝试转到SuperUser,它可能更适合那里。这确实是一个编程问题,但我相信问题本身也与管理有关。我不知道这是否符合你的问题,但也许模拟可以帮助: