2017-03-09 11 views
-1

私はpowershellでコマンドを実行する方法を見つけようとしており、結果の各行を別の変数に入れて後でスクリプトで使用する方法を探しています。私は以下のでしょう複数変数の複数valusの解析

C:\> Get-VMHost -Name hq-esxi-prod-01a.nsx.gss | Get-VM | select Name 

:たとえば、私は、以下のコマンドを実行した場合、私は、スクリプト内の別の変数にそれぞれの行を追加するスクリプト(除くを持ちたい

Name   
----   
HQ-LinServ-01a 
HQ-Win2012-01a 
HQ-Web-02a 

を最初は名前です)。

どうすればいいですか?

ありがとうございました。

答えて

3

あなたは別々の変数にそれぞれの値を入れてループ内でSet-Variableを使用することができます。

$i = 0 
... | Get-Vm | Select-Objet -Expand Name | ForEach-Object { 
    Set-Variable -Name "vm$i" -Value $_ 
    $i++ 
} 

しかし、通常は良いアドバイスではないこと。これは、1つ(配列)の変数にすべての名前を入れて、より一般的です:

$vmList = ...| Get-Vm | Select-Object -Expand Name 

ので、あなたはハッシュテーブルに(あなたが名前のいくつかの種類によるアクセスを必要とする場合)$vmList[<index>]を経由して個々の名前にアクセスする、またはすることができます

$i = 0 
$vmList = @{} 
... | Get-Vm | Select-Objet -Expand Name | ForEach-Object { 
    $vmList["vm$i"] = $_ 
    $i++ 
} 

ベストプラクティスは、必要なシナリオによって異なります。

0

回答していただきありがとうございます。私はあなたに答えを試みましたが、私はVMware用のPowerCLIを使用しているようですが、Select-Object -Expand(例外があるかどうかわかりません)を含んでいないようです。これに適した答えに達する。

私が以下で使用していると、それは以下のようにそれらを読んで、その後のforeachを使用して、配列内の値を追加し、うまく働いた:彼らはいくつかを持っていたとして

$p1vmname = Get-VMHost -Name hq-esxi-prod-01a.nsx.gss | Get-VM | select Name 
$p1vmlist = @() 
foreach ($p1line in $p1vmname) 
      { 
      $p1vmlist += $p1line 
      } 
       $p1 = 0 
       do { 
       $x = $p1+1 
       Write-Host -BackgroundColor:Black -ForegroundColor:Yellow "vm number $x is "$p1vmlist[$p1]"." 
       $p1++ 
       } 
       until ($p1 -eq $p1vmc) 
       } 

をただし、この名前を使用している場合、完全に間違っていました以下のように追加の文字:

vm number 1 is @{Name=HQ-Web-01a} 
vm number 2 is @{Name=HQ-LinServ-01a} 
vm number 3 is @{Name=HQ-Win2012-01a} 

私はスプリットとトリムを使用してこれらを以下のように取り除き、正常に動作しました。

$p1vmname = Get-VMHost -Name hq-esxi-prod-01a.nsx.gss | Get-VM | select Name 
$p1vmlist = @() 
foreach ($p1line in $p1vmname) 
      { 
      $p1vmlist += $p1line 
      } 
       $p1 = 0 
       do { 
       $x = $p1+1 
       $p1vmlist[$p1] = ($p1vmlist[$p1]) -split("=") | Select-Object -Last 1 
       $p1vmlist[$p1] = $p1vmlist[$p1].trimend("}") 
       Write-Host -BackgroundColor:Black -ForegroundColor:Yellow "vm number $x is "$p1vmlist[$p1]"." 
       $p1++ 
       } 
       until ($p1 -eq $p1vmc) 
       } 

出力:

vm number 1 is HQ-Web-01a . 
vm number 2 is HQ-LinServ-01a . 
vm number 3 is HQ-Win2012-01a . 

私をたくさん助けたあなたの答えをありがとうございました。

私は今、スクリプトを楽しんでいます。

関連する問題