2017-05-17 23 views
1

ハッシュテーブルの配列を文字列の配列に変換するにはどうすればよいですか?ハッシュテーブルの配列を文字列の配列に変換する方法

ユーザーがリストからサーバーを選択できるようにする簡単なメニューを作成しようとしています。ここでは、リストのサンプルです:

$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)"}) 

これは次のように表示されます。

(L)ocaldb  ((localdb)\mssqllocaldb) 
(D)ev   (DEV_SERVER) 
(T)est   (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コマンドレットを使用してuserEntryを選択:

$validSelections = $sqlServers | ForEach-Object {$_.userEntry} 
+0

ブリリアント、魅力のように働きました。ありがとう。 –

関連する問題