【发布时间】:2015-01-06 21:03:19
【问题描述】:
我正在尝试制作一个脚本,该脚本将在该脚本运行时为我的域中的每个域控制器返回 ldap searches/sec 计数器的值。
由于某种原因,在询问 4-5 个域控制器后,脚本挂起,不再显示任何内容,并且 Ctrl+C 也没有响应,仅在几秒钟后.
给各位专家的问题是:为什么这个脚本会挂起?难道我做错了什么?还有其他方法吗?
我将把我的脚本的两个版本放在下面。第一个只有一行:
[system.directoryservices.activedirectory.domain]::GetCurrentDomain() |
ForEach-Object {$_.DomainControllers} |
ForEach-Object {$_.Name} |
foreach-Object {
Get-Counter -computer $_ -counter "\\$_\DirectoryServices(*)\LDAP Searches/sec" |
select -ExpandProperty countersamples |
? {$_.path -match 'ldap searches/sec'} |
select path,cookedvalue |
Format-Table -AutoSize
}
第二种变体:
$domain_controllers = "C:\domain_controllers.txt"
Import-CSV $domain_controllers | ForEach-Object {
$dc = $_.domain_controller
Get-Counter -computer $dc -counter "\\$dc\DirectoryServices(*)\LDAP Searches/sec"
}
作为附加信息:我的域包含超过 10 个域控制器。
【问题讨论】:
-
等待后也没有错误?让我们关注静态列表(第二个变体)。尝试添加
Write-Host "$(Get-date) - Running Get-Counter for $dc"以查看它卡在哪个位置。我打赌您列表中/从 AD 返回的第 4、第 5 或第 6 个服务器没有响应 winrm 请求,或者它处于脱机状态。 cmdlet 超时需要一段时间。找出哪个失败,将其从列表中删除,然后重试。 -
另一种选择是并行运行查询(如jobs),这样一个挂起的作业就不会妨碍其他作业的运行。
标签: powershell active-directory