Фоновые задания построены поверх удаленного взаимодействия PowerShell и, таким образом, выполняют аналогичные действия при передаче объектов вокруг.
Они будут сериализовывать / десериализовать их, а не передавать их со всей их сложностью, что означает, что даже если вы используете -ArgumentList parameter of start-job
, очередь $ будет десериализована в строковый тип (или другие), который не имеет AddMessage () способ.
Вот обходной путь с использованием BeginInvoke
, который делает то же самое, что и работа:
$context=New-AzureStorageContext -StorageAccountName your_account -StorageAccountKey your_key
$queue = Get-AzureStorageQueue -Name 'myqueue0905' -Context $context
1..10 | % {
$m1 = New-Object -TypeName Microsoft.WindowsAzure.Storage.Queue.CloudQueueMessage -ArgumentList "this is a message $_"
$script = {param($p1,$m1) $p1.CloudQueue.AddMessage($m1)}
$p=[powershell]::Create()
$n=$p.AddScript($script).addargument($queue).addargument($m1)
$job=$p.BeginInvoke()
}
Мой результат теста, как показано ниже:
Сообщения добавляются на портал Azure: