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感到困惑。