2016-11-24 10 views
1

私はテンプレートとして単純なスクリプトを使用して、foreachという小さなループを設定しようとしていますが、私が他の例で見たことは、私にとってはうまくいかず、すでに存在する変数を使用することです。変数がすでに存在$hostによる一時的に既存のシステム変数を使用していますか?

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

これは動作しませんし、私はちょうど私が気づいたXMLを変更する考えながら、それは難しい:

は、ここで私が実行しようとしているものです。具体的には、すでに私は何か間違ったことをやっているか、どのように1は、この問題を回避行くのですか?

など user computername host hostnameのように理にかなっている変数を持っていないXML内の任意のタグを使用しないように

+1

'$ Host'は、自動変数であります別の名前を使用してください –

+0

それは、ポストの全体のポイントです、どのように他の人が$ホストを正常に使用するのですか? あまりにも多くの事前定義された変数があるので、それらのうちの1つを使用することなくコヒーレントXMLを構築することは困難です。 –

+0

@PatrikPersson about_automatic_variablesを参照する必要があります。また、Get-Variableは既に存在するものすべてを表示しますので、あなたがそれらを理解するまで確認できます。これは私を悩ますものではありません。その変数名は... $ singleHost'のようなものに変更してください – Matt

答えて

0

変数名の衝突を取得なぜ私は見当がつかないが、あなたはForeach-Objectコマンドレットへのパイプのノードをもでき、自動パイプラインの変数を使用し$_

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

面白い回避策ですが、うまくいきます!これを代替例として使用したことはありませんでしたが、今では 'foreach'と' ForEach-Object'の違いを説明する完璧なシナリオがあります! –

+0

foreach-objectは各* pipeline *オブジェクトを反復処理しますが、foreach-loopはリストを反復処理します。 –

関連する問題