2017-05-17 4 views
1

해시 테이블 배열을 문자열 배열로 변환하려면 어떻게해야합니까?해시 테이블 배열을 문자열 배열로 변환하는 방법

사용자가 목록에서 서버를 선택할 수있는 간단한 메뉴를 만들려고합니다.

(L)ocaldb  ((localdb)\mssqllocaldb) 
(D)ev   (DEV_SERVER) 
(T)est   (TEST_SERVER) 

내가 서버 내 목록에서 올바른 사용자 선택의 목록을 읽을 수는, 다음 사용자가 가지고있는 키를 확인 :

$sqlServers = @(@{key="LOCALDB"; serverName="(localdb)\mssqllocaldb"; 
        credentials="-E"; userEntry="L"; 
        menuText="(L)ocaldb`t`t((localdb)\mssqllocaldb)"}, 
       @{key="DEV"; serverName="DEV_SERVER"; 
        credentials="-E"; userEntry="D"; 
        menuText="(D)ev`t`t`t(DEV_SERVER)"}, 
       @{key="TEST"; serverName="TEST_SERVER"; 
        credentials="-E"; userEntry="T"; 
        menuText="(T)est`t`t`t(TEST_SERVER)"}) 

이이 같이 표시됩니다 : 여기에 목록의 샘플입니다 누른 것은 유효한 선택 목록에 있습니다. 이것은 내가 지금까지있어 무엇을 다음 $userSelection (eg "d")가 노출되지 않도록, 문자열로 캐스팅 할 때

function Get-UserSelection (
    [Parameter(Mandatory=$True)] 
    $servers 
    ) 
{ 
    Write-Host "Select the server to run the SQL scripts on (type a letter followed by the [Enter] key, or press CTRL+C to exit)" 

    foreach ($server in $servers) 
    { 
     Write-Host "`t" $server.menuText 
    } 

    $validSelections = $servers | Select-Object {$_.userEntry} 
    $userSelection = "" 

    while ($True) 
    { 
     $userSelection = Read-Host   

     ForEach ($validSelection in $validSelections) 
     { 
      if ($userSelection -eq $validSelection) 
      { 
       return $userSelection 
      } 
     } 

     Write-Host "Invalid selection. Please try again or press CTRL+C to exit" 
    } 
} 

문제는 대신 L 또는 D의 값을 갖는으로, 그 $validSelection이다 @{$_.userEntry=L} 같은 값을 가진다 유효한 것으로 간주됩니다.

나는 $validSelections 대신 사용자 정의 객체의 배열의 문자열의 배열이되도록 어떻게 이것을 수정할 수있는 문제는 라인

$validSelections = $servers | Select-Object {$_.userEntry} 

에 가정?

답변

1

거의 다 왔었습니다. 다만 각 해시 테이블을 통해 으로 반복ForEach-Object cmdlet를 사용하고 userEntry 선택

브릴리언트
$validSelections = $sqlServers | ForEach-Object {$_.userEntry} 
+0

은, 마치 마법처럼 일을. 감사. –