簡體   English   中英

Powershell - $args 去掉逗號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM