2016-10-27 5 views
0

私が最初に投稿したスクリプトに私の最初の問題が見つかりました。次の問題がありますが、これは簡単なものだと確信しています。Powershellはテキストファイルの各項目に対してコマンドを実行します

次のスクリプトの目的は、ホスト名のリストをテキストファイルで検出された各コンピュータに対して指定されたADSIコマンドを実行することです - 次のように例:

Computer01

Computer02

Computer03

問題は、スクリプトを実行すると、コンピュータ名にすべてのコンピュータ名ファイルを作成し、一緒にマッシュアップして1つの巨大なコンピュータ名を作ります。これは明らかに私が接続しようとしているコンピュータではありません!

ここにスクリプトがあります。私が走ろうとしているADSI機能は、3分の4ほどです。

Function Get-OpenFile($initialDirectory) 
{ 
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
Out-Null 

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = "Text Files (*.txt)|*.txt)|CSV Files (*.csv)|*.csv)" 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.filename 
$OpenFileDialog.ShowHelp = $true 
} 

$InputFile = Get-OpenFile 
$Computers = get-content -path $InputFile 

Do { 
write-host = "Do you want to Enter a Domain Group to Add to the Local Administrators Group? Type Y for Yes, or N for No" 
$GroupAddOperation = read-host = " " 
If ($GroupAddOperation -eq "N") {break} 

Do { 
write-host = "Enter Group Name" 
$groupname = Read-Host " " 

$DomainGroup = $groupname 
$LocalGroup = "Administrators" 
$Domain  = "domainname.com" 
$pc   = $computers 

([ADSI]"WinNT://$pc/$LocalGroup,group").psbase.Invoke("Add",([ADSI]"WinNT://$Domain/$DomainGroup").path) 

Write-Host "Do you want to Add Another Group? Enter Y for Yes or N for No" 
$AddAnotherGroup = Read-Host " " 
} 
Until ($AddAnotherGroup -eq "N") 
} 
Until ($GroupAddOperation -eq "N") 

私はそれの前に「書く・ホスト」コマンドを使用してADSIコマンドを実行する場合は、ここで出力はPSコンソールにあるものです:

([ADSI] WinNT://Computer01.domainname.com Computer02.domainname.com Computer03.domainname.com/Administrators group).psbase.Invoke(Add,([ADSI]WinNT://us.kworld.kpmg.com/us-sg eaudit business).p 
ath) 

基本的に私は必要なもののためでありますすべての3台のコンピュータで順に実行されるADSIコマンド私は間違って何をしていますか?

+0

http://stackoverflow.com/documentation/powershell/1067/loops – TessellatingHeckler

答えて

0

As TessallatingHecklerにリンクされています。 ファイルまたはハッシュテーブルからコンピュータを取得し、それらを変数に割り当てます。

$computers = @("Computer01", "Computer02", "Computer03") 

foreach($computer in $computers) 
    { 
    ([ADSI]"WinNT://$computer/$LocalGroup,group").psbase.Invoke("Add",([ADSI]"WinNT://$Domain/$DomainGroup").path) 
    } 

これが役に立ちます。

+0

ありがとう、これは完全に機能しました。 ファイルダイアログ関数を使用して取得した情報を含む変数に@()演算子を追加しました。それが定義されると、私は個々のコンピュータにコマンドを個別に適用することができました!別の投稿に固定コードを表示します! –

+0

それが働いたことを知ってよかった、私たちに知らせてくれてありがとう。 –

関連する問題