2017-02-22 19 views
0

私は、http://iislogs.com/steveschofield/2009/01/09/list-local-administrators-on-a-machine-using-powershell-adsi/の次のPowershellを使用して、PCと内部ネットワークのサーバーで構成されたローカルおよびドメイン管理アカウントを抽出しています。ネットワーク上のローカル管理者を一覧表示するPowershell

PowerShellスクリプトは以下の通りです:実行すると

function LogToFile ([string]$strFileName, [string]$strComputer) 
{ 
Add-Content $strFileName $strComputer 
} 

$strComputer = “server1.loc.mydomain.com” 
$computer = [ADSI](“WinNT://” + $strComputer + “,computer”) 
$Group = $computer.psbase.children.find(“Administrators”) 
$members= $Group.psbase.invoke(“Members”) | %{$_.GetType().InvokeMember(“Name”, ‘GetProperty’, $null, $_, $null)} 

ForEach($user in $members) 

{ 
Write-Host $user 
$a = $strComputer + “!” + $user.ToString() 
LogToFile “C:\local-admins.txt” $a 
} 

、それは次の形式でtxtファイルに結果を生成します。

server1.loc.mydomain.com!Administrator 
server1.loc.mydomain.com!JohnDoe 
server1.loc.mydomain.com!Support 
server1.loc.mydomain.com!Domain Administrators 
  1. 誰かがTXTに出力を変更するために私を助けることができる

    結果は次の形式で表示されます。

    server1.loc.mydomain.com!Administrator!JohnDoe!Support!Domain Administrators 
    

このように報告された場合、私は簡単にcsvにエクスポートして作業できます。 これは、txtではなく、希望の形式でCSV形式でエクスポートするように変換できれば、すばらしいことです。

  1. 6行目のコードをどのようにするかserver1、server2、.... server38 ...という名前のサブネット全体をスキャンする場合は、手動で各マシンの行を変更する必要はありません。私はサーバ*、サーバ[*]を試しました。それは私にエラーを与えます。

私はPSの完全な初心者ですが、私のニーズに対応するために物事をまとめようとしており、必要な助けを私に提供してくれることを願っています。

ありがとうございました。

$a = @($strComputer;$members) -join '!' 
LogToFile "C:\local-admins.txt" $a 

範囲演算子を使用し、自分の名前で連続した数字でサーバのリストを生成するには:だけに下部にforeach()ループを変更、1行ですべてのアカウントを持っているために、出力を変更するには

+0

'$ a = @($ strComputer; $ members)-join '!'' –

+0

ほとんどあります。しかし、管理者の数に応じて同じ行に出力されるようになりました。例えば。管理者が4人いる場合、出力は(より>が強調されている場合のみ) > server1.loc.mydomain.com!管理者!JohnDoe!サポート!ドメイン管理者 > server1.loc.mydomain.com!管理者!JohnDoe!サポート!ドメイン管理者 > server1.loc.mydomain.com!管理者!JohnDoe!サポート!ドメイン管理者 > server1.loc.mydomain.com!管理者!JohnDoe!サポート!ドメイン管理者 – valdroni

+0

全体の ' foreach(){} 'ループ、一度やり直してください –

答えて

1

..

$serverNames = foreach($number in 1..38){ 
    'server{0}' -f $number 
} 

だからあなたのようなもので終わる:

function LogToFile ([string]$strFileName, [string]$strComputer) 
{ 
    Add-Content $strFileName $strComputer 
} 

foreach($ServerNumber in 1..38){ 
    $ServerName = 'server{0}.loc.mydomain.com' -f $ServerNumber 
    $Computer = [ADSI]("WinNT://$ServerName,computer") 
    $Group = $Computer.psbase.children.Find('Administrators') 
    $Members= $Group.psbase.invoke('Members') |ForEach-Object { $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null) } 

    $Output = @($ServerName;$members) -join '!' 
    LogToFile 'C:\local-admins.txt' $Output 
} 
+0

*上記の編集ボタンを間違ってクリックしました。 @Mathiasのコードに変更はありません。ありがとう – valdroni

関連する問題