【问题标题】:Adding items in an array of strings each one at a time一次添加一个字符串数组中的项目
【发布时间】:2020-09-10 03:49:56
【问题描述】:

我有这行代码:

invoke-command -Session $s -scriptblock {Set-Adgroup  $using:ListBox1.SelectedItem -add @{proxyaddresses="$using:smtps"}}

$s 是合法会话,例如 $listbox.selecteditem 是一个名为 Old-Sales-Users 的 dist 组,而 $smtps 是一个字符串数组,如下所示: @smtps = "smtp:bla@bla.bla", "smtp:bla2@bla.bla", "smtp:bla3@bla.bla"

我想调用这个命令,这样我就可以将这些 smtps 添加到 dist 组的代理地址。但这里的工作方式是将3个字符串添加到同一行,所以我得到一行proxyaddress与“smtp:bla@bla.bla smtp:bla2@bla ....”我希望它创建3个单独的行(或者更多,如果该数组中有更多)意味着在数组中的每个项目之后按下 ENTER ......我的第二个问题是这是否是正确的方法?因为我实际上打开了 3 个调用命令,有没有办法使用 1 个调用命令将所有数组添加到代理地址?

谢谢

【问题讨论】:

  • 删除 " 周围的双引号 $using:smpts
  • 它会抛出一个错误:无效类型'System.Management.Automation.PSObject'。参数名称:proxyaddresses + CategoryInfo : InvalidArgument: (OldIT:ADGroup) [Set-ADGroup], ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADGroup + PSComputerName : dc01
  • 这是$using:ListBox1.SelectedItem引用的对象有问题,可以试试$GroupName = $ListBox1.SelectedItem.DistinguishedName,然后在远程脚本块中将$using:GroupName传递给Set-ADGroup
  • 我猜这可能行得通,但我需要更改更多代码行,因为当我们到达这里时,$listbox1.selecteditems 只是字符串,有没有办法传递字符串数组并到达它们中的每一个为自己?我猜一个解决方案将是一个进入数组内部的循环并为每个项目调用命令,但这就像一个矫枉过正的 ithink
  • 试试-Add @{proxyaddresses= [string[]]$using:smtps}

标签: powershell command invoke


【解决方案1】:

发表我的评论作为答案:

虽然Set-ADUser 的文档中没有明确说明,但将项目添加到ProxyAddresses 列表需要新的 smtp 地址数组是强类型,因此数组中的每个项目都是类型为[string]

这意味着要添加的数组需要使用[string[]]进行强制转换

你可以看到这样的区别:

$arr1 = 'an','array','can','also','contain','numbers',1,2,3
$arr1.GetType().FullName  # --> System.Object[]

[string[]]$arr2 = 'an','array','can','also','contain','numbers',1,2,3
$arr2.GetType().FullName  # --> System.String[]

在你的情况下,使用

-Add @{proxyaddresses= [string[]]$using:smtps}

【讨论】:

  • 或者当他设置smtps时,他应该用[string[]]标签设置它...Powershell是一种弱类型语言,这意味着它会尝试检测你正在设置的变量的类型,(如反对强类型)。有时它会出错,因此自己识别它可以消除任何可能出现的错误。因为他的示例以@smtps = "bla" 开头,@smtps = 可能会混淆 powershell。
猜你喜欢
  • 2021-04-10
  • 2016-04-30
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2013-07-12
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多