[英]Powershell - $args strips out the comma
我正在編寫一個腳本來與 3rd 方軟件交互。
他們以以下格式發送字符串:
sender-ip=10.10.10.10, primary site location=peachtree street, created by=jsmith
但是,當腳本執行時
Write-host $args
這是輸出
sender-ip=10.10.10.10 primary site location=peachtree street created by=jsmith
如何使用逗號保留原始輸入字符串?
編輯:
下面是代碼片段
$args = $args.ToString()
write-host '$args is' $args
foreach ($i in $args){
$line_array+= $i.split(",")
write-host '$line_array is' $line_array
}
foreach ($j in $line_array){
$multi_array += ,@($j.split("="))
}
foreach ($k in $multi_array){
$my_hash.add($k[0],$k[1])
}
$Sender_IP = $my_hash.Get_Item("sender-ip")
當我執行代碼時
script.ps1 sender-ip=10.10.10.10, primary site location=peachtree street, created by=jsmith
我得到
$args is System.Object[]
$line_array is System.Object[]
$Sender_IP is
它將其解釋為多個參數。 您需要引用整個內容,以便它只知道一個參數:
&{Write-Host $args} sender-ip=10.10.10.10, primary site location=peachtree street, created by=jsmith
&{Write-Host $args} 'sender 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
sender 10.10.10.10, primary site location=peachtree street, created by=jsmith
當提供像ab=c,d
這樣的參數時,我發現$args
具有以下數組布局:
[
"a",
[
"b=c",
"d"
]
]
因此,為了將參數恢復為逗號,我使用了以下函數:
function process_args {
$newArgs = @()
foreach ($arg in $args) {
if ($arg -is [array]) {
# collapse back any comma separated arguments to a string
$newArgs = $newArgs + ($arg -join ",")
} else {
$newArgs = $newArgs + $arg
}
}
return $newArgs
}
$args = process_args @args
這給我留下了一個數組,如:
[
"a",
"b=c,d"
]
到目前為止,這對我來說似乎沒問題,但我不知道有關 powershell 的 CLI arg 解析的詳細信息,所以這可能是錯誤的......如果我發現任何邊緣情況,我會回來報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.