2016-10-27 2 views
0

Gefunden mein erstes Problem mit dem Skript, das ich ursprünglich gepostet habe. Hier ist das nächste Problem, und ich bin mir sicher, dass dies ein leichtes ist.Powershell run Befehl gegen jedes Element in der Textdatei

Das Ziel des folgenden Skript ist den angegebenen ADSI-Befehl für jeden Computer in einer Host-Namen-Liste Textdatei gefunden laufen - Beispiel wie folgt:

Computer01

Computer02

Computer03

Das Problem besteht darin, dass bei der Ausführung des Skripts JEDER Computername im Computernamen eingegeben wird file und mashes sie zusammen, um einen riesigen Computernamen zu machen, der offensichtlich nicht der Computer ist, mit dem ich mich verbinde!

Hier ist das Skript. Die ADSI-Funktion, die ich ausführen möchte, ist etwa 3/4 von unten.

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") 

Wenn ich das ADSI-Befehl mit einem „Write-Host“ Befehl vor ihm laufen, hier ist es, was die Ausgabe an die PS-Konsole ist:

([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) 

Im Grunde, was ich brauche für die ist Der ADSI-Befehl wird nacheinander auf ALLEN DREI Computern ausgeführt. Was mache ich falsch?

+0

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

Antwort

0

Als TessallatingHeckler verknüpft. Holen Sie Ihre Computer aus einer Datei oder aus der Hash-Tabelle und weisen Sie sie einer Variablen zu.

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

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

Hoffe, das hilft.

+0

Vielen Dank, das hat perfekt funktioniert. Was ich getan habe, war, den Operator @() zu der Variablen hinzuzufügen, die die Informationen enthielt, die mit der Funktion Dateidialog abgerufen wurden. Sobald das definiert war, konnte ich den Befehl auf jeden Computer einzeln anwenden! Ich werde den festen Code in einem anderen Beitrag zeigen! –

+0

Gut zu wissen, dass es funktioniert hat, danke, dass Sie uns wissen lassen. –