2017-03-09 1 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++ 
} 

그러나, 일반적으로 좋은 조언이 아니다.

$i = 0 
$vmList = @{} 
... | Get-Vm | Select-Objet -Expand Name | ForEach-Object { 
    $vmList["vm$i"] = $_ 
    $i++ 
} 
: 해시 테이블에 (당신이 이름의 어떤 종류의 액세스를 필요로하는 경우)

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

그래서 당신이 $vmList[<index>]를 통해 개별 이름에 액세스하거나 할 수 있습니다 : 그것은 하나의 (배열) 변수에 모두 이름을 넣어 더 일반적입니다

모범 사례는 필요한 특정 시나리오에 따라 달라집니다.

0

답장을 보내 주셔서 감사합니다. 답변을 시도했지만 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 . 

나에게 많은 도움이 답변 주셔서 너무 감사드립니다.

저는 지금 실제로 스크립팅을 즐기고 있습니다.

관련 문제