如何将哈希表数组转换为字符串数组?
我正在尝试创建一个简单的菜单,它允许用户从列表中选择一个服务器。以下是列表示例:
$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)
我想从我的服务器列表中读取有效用户选择列表,然后检查用户按下的键是否在该有效选择列表中。这是我到目前为止所得到的:
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"
}
}
问题是$validSelection
,而不是L
或的值D
,具有与@{$_.userEntry=L}
转换为字符串时一样的值,因此$userSelection (eg "d")
永远不会被视为有效。
我认为问题出在这条线上
$validSelections = $servers | Select-Object {$_.userEntry}
我如何修改这个让$validSelections
是一个字符串数组,而不是自定义对象的数组?
你快到了。只需使用ForEach-Object
cmdlet来迭代在每个哈希表,并选择价值的userEntry
:
$validSelections = $sqlServers | ForEach-Object {$_.userEntry}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句