【问题标题】:How to create Powershell Object with other Objects as Argument如何以其他对象为参数创建 Powershell 对象
【发布时间】:2016-06-16 19:39:50
【问题描述】:

我正在尝试为 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:找不到类型 [Microsoft.ServiceBus.Messaging.SharedAccessAuthorizationRule]:确保 加载包含此类型的程序集。 在行:1 字符:28 + $PublisherRule = 新对象

【问题讨论】:

  • PowerShell 行是否返回错误?如果是,你应该在这里发布,如果不是,你应该检查 $PublisherRule 运行后包含的内容并在此处发布结果
  • 编辑并添加了错误
  • 太棒了 - 如果你有机会,你应该发布这个问题的答案,因为这可能会帮助遇到这个问题的其他人!

标签: powershell powershell-3.0 azure-powershell


【解决方案1】:

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

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

【讨论】:

  • 试过了,但它给出了以下错误:新对象:找不到“SharedAccessAuthorizationRule”的重载和参数计数:“3”。在 line:1 char:18 + $PublisherRule = New-Object -TypeName Microsoft.ServiceBus.Messaging.SharedAcces ... + ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-Object], MethodException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
【解决方案2】:

第三个参数数组需要是强类型数组。转换后的脚本如下,并且可以正常工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2015-03-31
    • 2019-08-03
    • 2017-04-22
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多