我正在尝试创建一个脚本,该脚本将在该脚本运行时从我的域返回每个域控制器的ldap searches/sec
计数器的值。
由于某种原因,在询问4-5个域控制器之后,脚本挂起,不再显示任何内容,并且 Ctrl + C 也没有响应,只有在一些好的秒后
专家的问题是:为什么这个脚本挂起?难道我做错了什么?还有另外一种方法吗?
我将把我的脚本的2个版本放在下面。第一行只有一行:
[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个以上的域控制器。
答案 0 :(得分:1)
我在互联网上找到了一个使用后台运行空间的代码。 现在我的脚本看起来像这样:
$code = {
$domain_controllers = "C:\domain_controllers.txt"
Import-CSV $domain_controllers | ForEach-Object {
$dc = $_.domain_controller
$counter = Get-Counter -computer $dc -counter "\\$dc\DirectoryServices(*)\LDAP Searches/sec" `
| select -ExpandProperty countersamples | ? {$_.path -match 'ldap searches/sec'} `
| select path,cookedvalue
$path = $counter.path.split("\")
$log = $path[2] + " - " + $counter.cookedvalue
$log | Out-File -Append C:\result.txt
}
}
$newPowerShell = [PowerShell]::Create().AddScript($code)
$job = $newPowerShell.BeginInvoke()
While (-Not $job.IsCompleted) {}
$newPowerShell.Dispose()
我不能相信它,但它最多可以在1分钟内完成工作。以前的工作(我让它运行并忘记它)大约需要40分钟才能完全运行。
我仍然需要处理脚本的最终外观并涉及一些电子邮件发送,但到目前为止这么好。 感谢您的提示。