2016-11-24 1 views
1

Also, ich versuche, ein einfaches Skript als Vorlage zu verwenden, um mehrere Server mit einer kleinen foreach Schleife zu konfigurieren, aber was ich in anderen Beispielen gesehen habe funktioniert einfach nicht für mich und es geht um die Verwendung von Variablen, die bereits existieren.Vorübergehend vorhandene Systemvariablen verwenden?

Um genauer zu sein, hier ist das, was ich versuche zu laufen: bereits

[xml]$windows=(Get-Content P:\script\windows.xml) 
foreach ($host in $windows.servers.host) { 
$host.name 
$host.user 
} 

Das funktioniert nicht aufgrund $host Variable bestehenden und während ich nur die Änderung der XML dachte ich, es ist schwierig, bemerkt nie alle Tags in einem XML zu verwenden, die nicht bereits über eine Variable, die

Bin ich etwas falsch nur tun, Sinn wie hostnamehostcomputernameuser usw.

macht oder wie geht man dieses Problem um?

+1

'$ Host' ist eine automatische Variable, Verwenden Sie einen anderen Namen –

+0

Nun, das ist der ganze Punkt des Beitrags, wie nutzen andere Leute $ Host erfolgreich? Es gibt so viele vordefinierte Variablen, dass es schwierig ist, ein kohärentes XML zu erstellen, ohne jemals eines davon zu verwenden. –

+0

@PatrikPersson Sie müssen auf about_automatic_variables verweisen. Get-Variable wird Ihnen auch alle bereits vorhandenen anzeigen, so dass Sie das überprüfen können, bis Sie mit ihnen vertraut sind. Das stört mich nicht. Es ist nur ein variabler Name ... ändern Sie es in etwas anderes wie '$ singleHost' – Matt

Antwort

0

Ich habe keine Ahnung, warum Sie Variablennamen Konflikte, aber Sie könnten die Knoten zum Foreach-Object Cmdlets auch über die Pipeline und verwenden Sie die automatische Pipeline Variable$_:

$windows.servers.host | ForEach-Object { 
    $_.name 
    $_.user 
} 
+0

Interessante Problemumgehung, aber es funktioniert! Nie gesehen, dass dies als ein alternatives Beispiel verwendet wird, aber jetzt haben wir ein perfektes Szenario, um die Unterschiede in 'foreach' und' ForEach-Object' zu beschreiben! –

+0

foreach-object iteriert über jedes * pipeline * -Objekt, während foreach-loop über eine Liste iteriert. –

Verwandte Themen