如何使用其他对象作为参数创建 Powershell 对象

How to create Powershell Object with other Objects as Argument

我正在尝试为 Azure 服务总线主题创建编写 Powershell 脚本。我在 C# 中有类似的代码,但现在我想将它转换为 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

您可以使用数组子表达式运算符 @() 将数组作为参数传递给 -ArgumentList:

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

数组的第三个参数必须是强类型数组。转换后的脚本如下所示并且有效:

[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;