Я пытаюсь выполнить Runbook PowerShell учетной записи службы автоматизации Azure, который должен выполнять сценарий PowerShell на виртуальной машине Azure Win, используя следующую инструкцию:
Invoke-AzureRmVMRunCommand -ResourceGroupName $sdvobjVM1.ResourceGroupName -Name $sdvstrNameVM1 -CommandId 'RunPowerShellScript' -ScriptPath $sdvstrScriptFileNameTmp -Parameter $sdvhshParamsFolderCopy
Параметр инструкции следующий:
$sdvhshParamsFolderCopy = @{Para1='String1'; Para2='String2'; Para3='String3'; Para4='String4'; Para5='String5'; Para6=@('Application', 'Data', 'Execution')}
Вопрос: Возможно ли это со встроенным массивом («Para6») в хеш-таблице? И если да, то как?
Я пробовал это в течение некоторого времени безуспешно, так как я не могу получить доступ к значениям массива в удаленном скрипте; см. ниже подробности и фактические образцы кода. Пожалуйста, помогите кому-нибудь !!!
Детали проблемы:
В модуле Runbook службы автоматизации Azure у меня есть:
...
[string] $sdvstrFileShare = "$sdvstrNameSA1.file.core.windows.net\$sdvstrFileShareName"
[array] $sdvastrCopyFolders = @('Application', 'Data', 'Execution')
...
$sdvhshParamsFolderCopy = @{sdvstrNameSA1 = $sdvstrNameSA1;
sdvstrSA1AccessKey = $sdvstrSA1AccessKey;
sdvstrFileShare = $sdvstrFileShare;
sdvstrSrcDriveLetter = $sdvstrSrcDriveLetter;
sdvstrDstDriveLetter = $sdvstrDstDriveLetter;
sdvastrCopyFolders = $sdvastrCopyFolders
}
(здесь надгробные акценты убраны)
В вызванном скрипте у меня есть:
# Parameters
Param (
[string] $sdvstrNameSA1,
[string] $sdvstrSA1AccessKey,
[string] $sdvstrFileShare,
[string] $sdvstrSrcDriveLetter,
[string] $sdvstrDstDriveLetter,
[array] $sdvastrCopyFolders
)
И [array] $ sdvastrCopyFolders, и [array []] $ sdvastrCopyFolders не будут работать.
Симптомом является то, что я получаю в вызванном скрипте:
$sdvastrCopyFolders | ForEach{$_} | Out-File -FilePath 'D:\sdvastrCopyFoldersForEach.txt'
System.Object[]
$sdvastrCopyFolders.Item(0) | Out-File -FilePath 'D:\sdvastrCopyFoldersItem0.txt'
System.Object[]
$sdvastrCopyFolders.GetValue(0) | Out-File -FilePath 'D:\sdvastrCopyFoldersGetValue.txt'
System.Object[]
, но не ожидаемые члены массива:
Application
Data
Execution
Если я тестирую эту передачу / извлечение параметров HT / Array между двумя сценариями в простой PowerShell, все работает так, как ожидалось:
PS Z:\> $sdvastrCopyFolders.Length
3
PS Z:\> (,$sdvastrCopyFolders).GetValue(0)
Application
Data
Execution
PS Z:\> (,$sdvastrCopyFolders).GetValue(0).Item(2)
Execution