在客户端计算机上刷新组策略设置的最终目标是确保任何更改都能成功应用。但如果只是执行GPUpdate.exe,你不会知道是否应用了一个新的或变动过的策略设置。以上四种方式均不能产生GPO应用错误报告。 生成组策略对象设置更改报告 你无法知道有多少台计算机的组策略设置被成功刷新了,也无法知道有多少没有成功刷新。但是PowerShell命令可以产生CSV报告。 使用GPUpdate.exe手动刷新客户端计算机上的组策略设置时,客户端计算机的Event Viewer会生成两个Event消息。Event ID 4004记录为计算机配置,Event ID 4005记录为用户配置。这两个Event ID表明了组策略设置经过GPUpdate.exe命令手动刷新。 事实上这并不能分辨出GPO刷新是否成功。客户端计算机上生成的另外两个Event ID可以显示GPO刷新是否成功。Event ID 8004在计算机配置成功应用后生成,Event ID 8005在用户配置成功应用后生成。这就是你为什么需要检查客户端计算机。 注意:不管你使用什么方式刷新GPO设置,GPO设置成功应用后将产生这些Event ID。 在你使用下面的PowerShell命令之前,请确保使用上述四种中的一种方法在远程计算机上执行GPUpdate.exe。假设你已经创建了Computers.TXT,其中包含了需要执行的计算机的名称。一旦执行,开始运行该命令。 1. 通过执行下面这个命令将Computers.TXT的内容存储到一个变量中: $ComputerList=Get-Content C:\Temp\Computers.TXT 上面的命令将Computers.TXT中的内容存储在$ComputerList变量中。该变量将在步骤3中的命令使用。 2. 其次,将今天的日期存储在一个变量中。因为你可能需要查看看Event ID生成的日期。你需要创建一个变量存储今天的日期。 $ThisDate = (Date).AddDays(0) “0”表明你想在当前日期检查远程计算机上的Event ID。你还可以指定–数字(如-2)。 3. 接下来,执行Get-WinEvent PowerShell cmdlet与ForEach cmdlet从远程计算机上收集Event ID 8004和8005,如下所示: ForEach ($Computer in $ComputerList) {$Computer; $Result=Get-WinEvent -ComputerName $Computer -FilterHashtable @{ logname = "Microsoft-Windows-GroupPolicy/Operational" ; StartTime = $ThisDate; ID = 8004, 8005 } | Select-Object TimeCreated, Message, ID, MachineName} 上述命令处理C:\Temp\Computers.TXT中指定的每个计算机上的Get-WinEvent cmdlet。命令只检查远程计算机上的Event ID 8004和8005,结果存储在名为$Result的变量中。 4. 最后,运行下面的命令将$Result变量中的结果输出到CSV文件中: $Result | Export-CSV C:\Temp\RefreshStatus.CSV -NoTypeInformation Open C:\Temp\RefreshStatus.CSV file, and the result should look like this screenshot (Figure 1):
图1 如上述报告所示,步骤3中执行的PowerShell命令能够成功收集Event ID以及Event ID报告信息,这些信息来自两台计算机:ComputerName.DomainName.com和ComputerName2.DomainName.com。 这份报告并没有表现出步骤3运行时有任何故障。远程桌面管理员不仅应该熟悉这四个刷新多台远程计算机的组策略对象设置的方法,而且也应该知道如何验证这些刷新是否成功。 原文转载于TechTarget,欢迎交流! |