Powershell 在字符串数组中每次添加一个项

Powershell 在字符串数组中每次添加一个项,powershell,command,invoke,Powershell,Command,Invoke,我有一行代码: 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.b

我有一行代码:

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"

我想调用此命令,以便将这些SMTP添加到dist组的代理地址。但这里的工作方式是将3个字符串添加到同一行,因此我得到一行带有“smtp:bla@bla.blasmtp:bla2@bla....“我想让它创建3个独立的行(如果数组中有更多行,则会创建更多行),这意味着在数组中的每个项目之后都会按ENTER键…”。。。我的第二个问题是,这样做是否正确?因为我实际上打开了3个invoke命令,所以有没有办法使用1个invoke命令将所有数组添加到proxyaddress


感谢您将我的评论作为答案发布:

虽然在的文档中对此不清楚,但将项目添加到
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}

将我的评论作为回答:

虽然在的文档中对此不清楚,但将项目添加到
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}

删除
围绕
$的双引号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.DifferentiedName]
然后将
$using:GroupName
传递到远程脚本块中的
Set ADGroup
,我想这可能会起作用,但我需要为cuz$listbox1更改更多代码行。当我们到达这里时,selecteditems只是字符串,难道没有办法传递字符串数组并自行到达每个字符串吗?我猜解决方案会是这样的一个循环进入数组并为每个项调用命令,但这就像是一个杀伤力过大的Inktry
-Add@{proxyaddresses=[string[]]$using:smtps}
删除
双引号(
$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.选择editem.differentizedName
,然后在远程脚本块内将
$using:GroupName
传递给
Set ADGroup
,我想这可能会起作用,但我需要为cuz$ListBox1更改更多的代码行。当我们到达这里时,selecteditems只是字符串,难道没有办法传递字符串数组并自己到达每个字符串吗?我猜解决方案应该是一个循环进入数组并为每个项调用命令,但这就像是一个杀伤力过大的问题,我想使用:smtps}
添加{proxyaddresses=[string[]]$using:smtps}或者当他设置smtps时,他应该用
[string[]
标记设置它……Powershell是一种弱类型的语言,这意味着它将尝试检测您正在设置的变量类型(与强类型相反)。有时它会出错,所以自己识别它可以消除任何可能出现的错误。因为他的示例以
@smtps=“bla”
开头,
@smtps=
可能会混淆powershell。或者当他设置smtps时,他应该用
[string[]
标记设置它……powershell是一种弱类型语言,这意味着它将尝试检测您正在设置的变量类型(与强类型相反)。有时它会出错,因此自己识别它可以消除可能出现的任何错误。。因为他的示例以
@smtps=“bla”
开头,
@smtps=
可能会让powershell感到困惑。