2017-01-10 12 views
0

私は完全に動作するscript1.ps1という名前のPowerShellスクリプトを持っています。ここにスクリプトがあります:ローカル 'Administators'グループのメンバーの検索を自動化

Write-Host Script to display members of the local -ForegroundColor Green 
Write-Host Administators group of a remote server. -ForegroundColor Green 
Write-Host "`n" 

$strComputer = Read-Host "Please enter the computer name" 

$computer = [ADSI]("WinNT://" + $strComputer + ",computer") 
$group = $computer.PSBase.Children.Find("administrators") 

Write-Host "" 
Write-Host "Computer Name : "$computer.Name 
Write-Host "_____________________________________" 
Write-Host "" 
Write-Host "Group Name : "$Group.Name 
Write-Host "_____________________________________" 

$domain = $group.Path.Split("/")[2] 
$string1 = "WinNT://" + $domain + "/" + $strComputer + "/" 
$string2 = $strComputer + "/" 
$string3 = "WinNT://" 

$members = ($group.PSBase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"") 

Write-Host "" 
Write-Host "Members : " 
Write-Host "" 
$members 

しかし、わかりますように、私はいつもコンピュータの名前を書く必要があります。 テキストやCSVファイルから自動的にコンピュータ名を取得するなどの機能があるかどうかは自問です。 これはスクリプトの初めで自動的にすべてのコンピュータ名を受け取ります&ローカルの「管理者」グループのメンバーに、1つのテキストファイルまたはCSVファイルにもエクスポートされますか?


編集:が与えられた答えに応じてスクリプトを更新しました。

私は完全に動作しないscript1.ps1という名前のPowerShellスクリプトを持っています。

Write-Host Script to display members of the local -ForegroundColor Green 
Write-Host Administators group of a remote server. -ForegroundColor Green 
Write-Host "`n" 

Get-Content 'C:\Users\herbautr\Desktop\List1.txt' | ForEach-Object { 
    Write-Host "-$_-" 
    $computer = [ADSI]("WinNT://" + $_ + ",computer") 
    $group = $computer.PSBase.Children.Find("administrators") 

    Write-Host "" 
    Write-Host "Computer Name : "$computer.Name 
    Write-Host "_____________________________________" 
    Write-Host "" 
    Write-Host "Group Name : "$Group.Name 
    Write-Host "_____________________________________" 

    $domain = $group.Path.Split("/")[2] 
    $string1 = "WinNT://" + $domain + "/" + $_ + "/" 
    $string2 = $_ + "/" 
    $string3 = "WinNT://" 

    $members = ($group.PSBase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"") 

    Write-Host "" 
    Write-Host "Members : " 
    Write-Host "" 
    $members 
} | Set-Content 'C:\Users\herbautr\Desktop\administrators.txt' 

私はList1.txtに1つのコンピュータ名を追加します::

01SPEAI-TEST1 
01SPEAI-TEST2 
02SPHPV-TEST1 
01SLCPTAAP-PROD

をそして、それが動作する(しない)完全に(読めないレイアウト)

01SPEAI-PROD1/Administrator 
VNF-PRINCIPAL/Admins du domaine 
VNF-PRINCIPAL/svceri 
01SPEAI-PROD2/Administrator 
VNF-PRINCIPAL/Admins du domaine 
VNF-PRINCIPAL/svceri 
02SPHPV-PROD1/Administrator 
VNF-PRINCIPAL/Admins du domaine 
01SLCPTAAP-PROD/Administrator 
VNF-PRINCIPAL/Admins du domaine 
01SLCPTAAP-PROD/maint 
VNF-PRINCIPAL/svcoraas 
VNF-PRINCIPAL/svcvisionit 
VNF-PRINCIPAL/GopOAS 
VNF-PRINCIPAL/svcdigora 

注ここでスクリプトがあります(午後03時18分午後):ちょうど1名を追加するとき、それは「作品」なぜ私は...それは仕事を続け、5名としてみてください

がありますか? OO」

+0

'$ _'があなたの考えであることを確認してください。 'Write-Host 'の出力は何ですか? - $ _-" '? –

+0

@Ansgar私は、このチェックを$ _ = "lol"としました。 Write-Host "$ _"(私を笑って表示)私は理解しています。しかし、Get-Contentの前に$ _を定義する必要がありますか、または$ _を私が望むものに置き換えることはできますか? – Skyxia

+0

'Write-Host" - $ _- "をループの中に置き、出力が何であるかを報告してください。私がここに書いている通り、*正確に*のステートメントを使用してください。何も出さないでください。何も追加しないでください。 –

答えて

1

あなたはGet-ContentSet-Contentを探しています。あなたが現在のオブジェクトautomatic variable$_)とForEach-Objectループ内$strComputerのすべての出現を交換する必要が

Get-Content 'C:\path\to\computers.txt' | ForEach-Object { 
    $computer = [ADSI]("WinNT://" + $_ + ",computer") 
    ... 
} | Set-Content 'C:\path\to\administrators.txt' 

注意。

あなたはImport-CsvExport-Csvコマンドレットを使用して、入力と出力のためのCSVを使用したい場合。

Import-Csv 'C:\path\to\computers.csv' | ForEach-Object { 
    $computer = [ADSI]("WinNT://" + $_.ComputerName + ",computer") 
    ... 
    $members | ForEach-Object { 
    New-Object -Type PSObject -Property @{ 
     Member = $_ 
    } 
    } 
} | Export-Csv 'C:\path\to\administrators.csv' -NoType 

あなたは複数のプロパティを持つアイテムを処理する必要がある場合のCSVは、いくつかの利点を持っているが、彼らはやや単純な文字列(上記の私の例で見ることができるように)よりも、より精巧な処理を必要とすることに注意してください。

関連する問題