Active Directory ldap搜索/秒

时间:2015-01-05 16:01:26

标签: powershell active-directory

我正在尝试创建一个脚本,该脚本将在该脚本运行时从我的域返回每个域控制器的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个以上的域控制器。

1 个答案:

答案 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分钟才能完全运行。

我仍然需要处理脚本的最终外观并涉及一些电子邮件发送,但到目前为止这么好。 感谢您的提示。