2016-06-16 3 views
0

Я пытаюсь написать сценарий Powershell для создания темы Azure Service Bus. У меня есть аналогичный код в C#, который работает, но теперь я хочу преобразовать его в сценарий Powershell. Но сейчас я застрял на том, как преобразовать следующую строку в Powershell:Как создать объект Powershell с другими объектами в качестве аргумента

AuthorizationRule Ar = new SharedAccessAuthorizationRule("PublisherOwner", "SASKEY++++++++++++++++++++++", new[] { AccessRights.Listen, AccessRights.Send }); 

Я пытаюсь это так, но это не работает:

$PublisherRule = New-Object -TypeName Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule -ArgumentList "PublisherOwner", $PublisherKey 

Вот ошибка

New-Object : Cannot find type [Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule]: make sure the assembly containing this type is loaded. At line:1 char:28 + $PublisherRule = New-Object <<<< -TypeName Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule - ArgumentList "PublisherOwner", $PublisherKey + CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

+2

Ли линия PowerShell возвращает ошибку? Если это так, вы должны отправить его здесь. Если нет, вы должны проверить, что содержит '$ PublisherRule', после того, как он запущен, и опубликуйте результаты здесь. – Bassie

+1

Отредактировано и добавлено исправление – nido

+1

[Это сообщение Stackoverflow ответило на мой вопрос] (http: // stackoverflow. com/questions/27480745/powershell-cant-create-a-list-of-objects) – nido

ответ

0

Третий параметр, массив должен быть строго типизированным массивом. Преобразованный сценарий выглядит следующим образом:

[Microsoft.ServiceBus.Messaging.AccessRights[]]$PublisherRights = 
New-Object -TypeName "System.Collections.Generic.List[Microsoft.ServiceBus.Messaging.AccessRights]" ; 

$PublisherRights += [Microsoft.ServiceBus.Messaging.AccessRights]::Listen; 
$PublisherRights += [Microsoft.ServiceBus.Messaging.AccessRights]::Send; 

$Rule = New-Object -TypeName Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule -ArgumentList "PublisherRule", "SASKEY", $PublisherRights; 
0

Вы можете использовать массив суб-выражение оператора @() передать массив в качестве аргумента в -ArgumentList:

$PublisherRule = New-Object -TypeName Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule -ArgumentList "PublisherOwner", $PublisherKey,@([Microsoft.ServiceBus.Messaging.AccessRights]::Listen,[Microsoft.ServiceBus.Messaging.AccessRights]::Send) 
+0

Пробовал, но это приводило к следующей ошибке: New-Object: Невозможно найти перегрузку для «SharedAccessAuthorizationRule» и количество аргументов: «3». В строке: 1 char: 18 + $ PublisherRule = New-Object -TypeName Microsoft.ServiceBus.Messaging.SharedAcces ... + ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [New-Object], MethodException + FullyQualifiedErrorId: ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand – nido