将传入的$ args转换为字符串值

时间:2013-11-27 18:25:55

标签: powershell args

我的powershell脚本与外部程序接口,该程序以

格式发送不同数量的参数
primary site=Peachtree Street

并以逗号分隔

primary site=Peachtree Street, last logon=13 Nov 2013, sender-ip-10.10.10.10

我一直在互联网上搜索如何将$ args转换为字符串 - 否则$ args删除逗号,我需要逗号

以下是我为$ args

尝试的内容

sender-ip = 10.10.10.10,主站点位置= peachtree street,由= jsmith创建

第一个剧本

write-host $args

$args = $args | Out-String

write-host $args

第一次输出

sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith
sender-ip=10.10.10.10
primary
site
location=peachtree
street
created
by=jsmith

第二个剧本

write-host $args

$args = "'" + $args + "'"

write-host $args

第二输出

sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith
'System.Object[] site location=peachtree System.Object[] by=jsmith'

第三个脚本

write-host $args

foreach ($i in $args){
   $i = $i | Out-String
}

write-host $args

第3次输出

sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith
sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith

但是如何保留逗号????

请帮助!!!

4 个答案:

答案 0 :(得分:2)

引用你的输入

"sender-ip=10.10.10.10, primary site location=peachtree street, created by=jsmith" 

逗号用于创建数组,但在文本周围引用它会将所有内容保存为单个字符串。

就我个人而言,我还建议您避免使用args并创建参数,以便将其称为-paramtername "sender-ip=10.10.10.10, primary site location=peachtree street, created by=jsmith"。或者至少使用$args[0]。如果有人忘记引号,事情可能会中断,因为$args将成为一个数组。

更新:这应该有效。但是,这是一个“肮脏的修复”。

Write-Host (($args | % { $_ -join ", " }) -join " ")

答案 1 :(得分:1)

您是否考虑编写脚本以将其作为管道输入而非参数?

$script = @'
Begin{}
Process {$_}
End {}
'@

 $script | set-content testscript.ps1

 'primary site=Peachtree Street, last logon=13 Nov 2013, sender-ip-10.10.10.10' | ./testscript.ps1

primary site=Peachtree Street, last logon=13 Nov 2013, sender-ip-10.10.10.10

然后你不受解析参数的影响。

答案 2 :(得分:1)

由于你无法控制你的输入,这样的东西可能会让你回到以逗号分隔的列表。

($args | select $_) -join ','

答案 3 :(得分:1)

人们总是似乎忘记了糟糕的旧输出字段分隔符变量$OFS,例如:

C:\PS> function foo {$OFS=',';"$args"}
C:\PS> foo sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith
sender-ip=10.10.10.10,primary,site,location=peachtree,street,created,by=jsmith

当数组的元素连接在一起显示为字符串时,将在数组的元素之间使用包含$OFS的字符串 - 通常在包含数组的变量在双引号字符串中引用时。