2014-12-12 4 views
0

Ниже у меня есть мой скрипт, который работает при подключении к Azure через PowerShell (чтобы вы могли проверить, есть ли у вас учетная запись Azure), вверху собирает список учетных записей Azure, в которых перечислены и в то же время создавая переменную ($ A, $ B, $ C, $ D и т. д.) для каждой найденной учетной записи. Ниже в разделе ответа моя переменная $ StorageSelection разрешает одну из них, например. $ B, однако, поскольку $ B также является переменной, а не просто запускать $ B, я хочу, чтобы иметь возможность запускать $ StorageSelection, который имеет значение $ B, и я хочу рассматривать значение $ B как переменную, отображающую $ B. Это похоже на преобразование значения $ StorageSelection в переменную и одновременное выполнение ее. Извините, если это звучит сбивает с толку, но в это время я делал свою голову часами.Вложенные переменные PowerShell, обрабатывающие значения как переменные

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"" 
+0

Где вы определяете '$ StorageSelection'? Я вижу, вы используете его, но я не вижу, где он создан. –

+0

Определяется на третьей последней строке. –

+0

. От третьей до последней строки определяется переменная с именем, полученным из значения '$ {choice}' (т.е. «B»), затем пытается инициализировать ее значением '$ StorageSelection '. Результатом этого будет '$ B = $ null' –

ответ

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".

+0

Привет, спасибо за ваше удивительное и быстрое объяснение, сегодня занят с детьми. Сейчас вечер, так что я впервые посмотрел на это.Но в вашем примере, если '$ B =" foo "и' $ choice = "B" ', то' $ StorageSelection' будет содержать '' foo '' в этом примере, на самом деле это то, что происходит на моем конце '$ B = "foo" и '$ choice =" B "' then '$ StorageSelection' содержит' '$ B" 'Мне нужно это так: $ StorageSelection =" foo "' то же, что и '$ B =" foo " '(в первую очередь) –

+0

Плохо, он работает, спасибо за вашу помощь :) –

Смежные вопросы