c# - 在未手动登录至少一次的情况下,无法远程获取计算机的组策略

标签 c# powershell winrm group-policy

我使用 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,并且没有任何区别。

有什么线索吗?

最佳答案

来自 documentation for gpresult :

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

由于您正在讨论在服务器上强制执行策略,通常不应期望用户登录,因此也许您可以尝试添加 /scope computer 选项来仅获取计算机策略,它应该始终可用。

关于c# - 在未手动登录至少一次的情况下,无法远程获取计算机的组策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56031286/

相关文章:

c# - 如何使自定义控件可验证?

c# - jquery触发c#函数

powershell - Register-PSRepository 上出现无效 Web Uri 错误

windows - Ansible WinRM : Bails out with "[Errno 111] Connection refused"

c# - "not in"的 Lambda 表达式?

javascript - Blazor 中的级联下拉菜单

powershell:发生错误时如何打印总调用堆栈?

windows - 使用 Powershell 获取嵌套 OU

sql-server - 在 vagrant 上通过 Chef-solo 时,SQL Server 安装失败,错误代码为 "Unable to generate a temporary class"

windows - 在 Windows 防火墙中允许 WinRM