0

このパワー シェル スクリプトで問題が発生し、スクリプトがシステム上のローカル アカウントのみを参照するようになりました。書かれているように、すべてのコンピューターの AD をポーリングするため、AD に負担がかかりすぎます。Get-Wmiobject に -Filter "LocalAccount='$True' を追加する必要があると思いますが、適切な場所に配置できないようです。支援やアドバイスをいただければ幸いです。また、このスクリプトは実際には 2 回作業を行っていると思います。 csv出力を生成するには、何か提案はありますか?

$Computers = Get-QADComputer -SizeLimit 0 | select -Expand name
    }


function Get-Admins {

Foreach ($Computer in $Computers){
$Online = Test-Connection -ComputerName $Computer -Quiet
    if ($Online -eq "True"){
    $GroupName = Get-WmiObject win32_group -ComputerName  $Computer | ? {$_.SID -eq 'S-     1-5-32-544'} | Select-Object name -ExpandProperty name
    $LocalGroup =[ADSI]"WinNT://$Computer/$GroupName"
    $GroupMembers = @($LocalGroup.psbase.Invoke("Members"))
    $Members = $GroupMembers | foreach {$_.GetType().InvokeMember("Name",   'GetProperty', $null, $_, $null)}
    foreach ($Member in $Members){
    $obj = New-Object System.Object
    $obj | Add-Member -MemberType NoteProperty -Name "Computer" -Value $Computer
    $obj | Add-Member -MemberType NoteProperty -Name "Local Admin" -Value $Member
    $obj
        }
    }
}
 }


Get-Admins | group { $_.Computer } | ForEach-Object {
  $computer = @($_.Group | Select-Object -Expand Computer)[0]
  $admins   = ($_.Group | Select-Object -Expand "Local Admin") -join ','
   '{0},{1}' -f $computer, $admins
 } | Out-File 'c:\scripts\CSV_Admin_export.csv'
4

2 に答える 2

0

フィルタを使用してターゲット マシンの管理者グループを取得します。

$GroupName = (Get-WmiObject Win32_Group -Filter "Domain='$Computer' AND SID='S-1-5-32-544'" -ComputerName $Computer).Name
于 2013-08-25T10:32:04.107 に答える
0

Get-WmiObject 呼び出しを次のように変更すると、大幅に簡素化できると思います。

Get-WmiObject Win32_Group -Filter "LocalAccount = $true AND SID = 'S-1-5-32-544'"

ご覧のとおり、関心のあるWhere-ObjectSID のみをフィルターで除外する代わりに、WMI フィルターも使用しました。

あなたが求めたフィルターの場合、以下のいずれかが機能します。

    "LocalAccount = 1"
    "LocalAccount = TRUE"
    "LocalAccount = 'TRUE'"
    "LocalAccount = $true"
    "LocalAccount = '$true'"
于 2013-08-25T10:25:25.713 に答える