我在这方面花了很多时间,并聘请了一些我认识的 PowerShell 专家,但没有任何运气。它应该很简单,但这次肯定不是这样。
客观的:
- 我想获取 OU 中的所有计算机(OU 中的计算机将发生变化 - 我愿意使用服务器列表,但它仍然需要每天运行以获取 OU 中的计算机并在继续之前更新 txt 文件到第二个任务 - 即将解释)。
- 然后,我将使用在 OU 中找到的计算机来运行 gpupdate(不是强制,每天 X 时间只有一个策略被链接 - 这正在由另一组 PS 脚本成功处理)。我知道这可以为 OU 手动完成,这不是我们想要的方式。我们正在使用第三方工具按计划运行 PS 脚本。由于过去的管理问题,此计算机上未使用任务计划程序,但无论第三方工具都很好。问题是我无法退回 OU 中的计算机。
我可以使用以下方法返回域中的所有计算机及其基本属性:
Get-ADComputer -Filter *
但是,我使用“SearchBase”和任何过滤器运行成功为 0:
Get-ADComputer -SearchBase "OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*"
我尝试将过滤器移到 SearchBase 之前,删除 * 周围的引号,使用单引号,省略过滤器并在提示为 * 时输入它,更改几乎每个单词的大小写,验证 OU 名称、域等,在OU 和 DC,将 OU 更改为 CN,确保模块已加载(它是)。
即使我让这部分工作,我的代码片段也会在管道之后继续执行 gpupdate,但我已经完全取消了它,因为我无法通过这个基本部分来收集计算机进行更新。
附加说明 - 这已在 Windows Server 2016 和 Windows Server 2019 上尝试过,分别为 16 gb 4 cpus、32 gb 8 cpus,只是为了显示马力 - 操作系统可能很重要,因为我在过去在 2012 年的服务器上,我发现大部分脚本的页面我相信是在 2012 R2 上运行的。
我试过运行:
Get-ADComputer -Filter 'DistinguishedName -like "CN=contoso,CN=com"'
以上不返回错误,但不返回任何结果。即使它也应该返回域中的所有计算机帐户。
尝试运行原始代码段时收到的错误: Get-ADComputer -SearchBase "OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*" 如下: Powershell 代码和返回的错误
此 OU 也是子/子 OU,因此我也尝试在搜索库中包含顶级 OU,但错误相同(未显示)
Get-ADComputer -SearchBase "OU=TopLevelOUName,OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*"
任何帮助或指示将不胜感激。我相信一旦我可以取回计算机的文本文件或保存在内存中的计算机并在同一 powershell 行上的管道之后使用该命令,我就不会遇到任何问题 GPUpdate 命令。我可以移除管道,添加新行,无论需要什么。我只需要返回这些计算机帐户,因为这个 OU 会随着时间的推移而波动很大。
最初在https://blog.thesysadmins.co.uk/group-policy-gpupdate-an-ou-of-computers.html找到这个 PowerShell 片段(参见方法 2)