PowerShell嵌套变量,将值视为变量

时间:2014-12-12 06:10:39

标签: powershell azure

下面我的脚本在通过PowerShell连接到Azure时有效(因此您可以测试您是否拥有Azure帐户),顶部是收集列出选项的Azure存储帐户列表,同时创建它找到的每个存储帐户的变量($ A,$ B,$ C,$ D等)。在答案部分下面,我的变量$ StorageSelection解析为其中一个,例如: $ B,但是因为$ B也是一个变量,而不是直接运行$ B我希望能够运行$ StorageSelection,其值为$ B,我想将$ B的值视为显示$的变量B的价值。它就像将$ StorageSelection的值转换为变量并同时运行它一样。对不起,如果这听起来有点令人困惑,但它已经坚持了好几个小时了。

do {
    $AzureStorageAccount = Get-AzureStorageAccount
    $StorageCount = ($AzureStorageAccount | Measure).Count
    write-host ""
    write-host "Choose a storage account"
    write-host ""

    $StorageNumber = 0
    do {
    $StepAzureStorageAccount = $AzureStorageAccount | select -Skip $StorageNumber | select -First 
    $GatherStorageAccountName = ($StepAzureStorageAccount).StorageAccountName
    $GatherLocation = @(if (($StepAzureStorageAccount).Location -ne $null) {($StepAzureStorageAccount).Location} `
    else {($StepAzureStorageAccount).AffinityGroup})
    $StorageLetter = $([char](65 + $StorageNumber))
    New-Variable -Name "${StorageLetter}" -Value $StepAzureStorageAccount -Force
    write-host $StorageLetter" - "$GatherStorageAccountName", "$GatherLocation
    $StorageNumber++
       }
    while ($StorageNumber -lt $StorageCount)

    write-host ""
    write-host "X - Exit"
    write-host ""
    write-host -nonewline "Type your choice and press Enter: "

    $choice = read-host

    write-host ""

    $ok = $choice -like '*'

    if ( -not $ok) { write-host "Invalid selection" }
} until ( $ok )

New-Variable -Name "${choice}" -Value $StorageSelection -Force
$storage = $StorageSelection
write-host "You entered"($Storage).StorageAccountName""

1 个答案:

答案 0 :(得分:0)

无论如何,这是你想要做的吗?

New-Variable -Name StorageSelection -Value (Get-Variable $choice).value -Force

也可以写成:

$StorageSelection = (Get-Variable $choice).value

让我解释一下,你可以确认我的思路:

你有:

$StepAzureStorageAccount包含一些Azure帐户信息。

然后根据帐户信息构建多个变量$A $B $C等。

然后,您要求用户选择其中一个变量(格式为A,B,C),并将响应存储在$choice中。

例如,$Choice的值为"B",您希望$B包含其他一些数据($StepAzureStorageAccount

您最终想要创建一个名为$StorageSelection的新变量,该变量接收$choice指向的变量所包含的值。

如果语言是C / C ++,我会说,你有一个指向另一个指针的指针,指向一个值。除非这不是C,指针并不完全存在。

但是Get-Variable存在。它做了什么,它创建了一个PSVariable类型的对象,它包含另一个变量的名称和值。

因此,如果$B = "foo"$choice = "B",则$StorageSelection将包含"foo"