2016-10-27 29 views
0

J'ai trouvé mon problème initial avec le script que j'ai posté à l'origine. Voici le prochain numéro, et je suis sûr que c'est facile.Powershell exécuter la commande contre chaque élément dans le fichier texte

Le but du script suivant pour exécuter la commande ADSI spécifiée contre chaque ordinateur trouvé dans un fichier texte de la liste des noms d'hôte - par exemple comme suit:

Ordinateur01

COMPUTER02

Computer03

Le problème est que lors de l'exécution du script, il faut CHAQUE nom de l'ordinateur dans le nom de l'ordinateur fichier et les écrase ensemble pour faire un nom d'ordinateur géant, qui, de toute évidence, n'est pas l'ordinateur auquel j'essaye de me connecter!

Voici le script. La fonction ADSI que j'essaie de faire fonctionner est à environ 3/4 de la baisse.

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

Si je lance la commande ADSI avec un « Write-Host » commande devant elle, voici ce que la sortie est de la PS Console:

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

Essentiellement ce que j'ai besoin est pour la La commande ADSI doit être exécutée sur TOUS les trois ordinateurs en séquence. Qu'est-ce que je fais mal?

+0

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

Répondre

0

Comme TessallatingHeckler lié à. Récupérez vos ordinateurs à partir d'un fichier ou de la table de hachage et affectez-les à une variable.

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

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

Espérons que cela aide.

+0

Merci beaucoup, cela a fonctionné parfaitement. Ce que j'ai fait était d'ajouter l'opérateur @() à la variable qui contenait l'information tirée en utilisant la fonction de dialogue de fichier. Une fois que cela a été défini, j'ai pu appliquer la commande à chaque ordinateur individuellement! Je vais montrer le code fixe dans un autre post! –

+0

Bon de savoir que cela a fonctionné, merci de nous le faire savoir. –