簡體   English   中英

在PowerShell中將數組作為參數傳遞

[英]Passing an array as a parameter in PowerShell

我在使用Powershell時遇到了一些麻煩,我的代碼如下所示:

param
(
    [Parameter(Mandatory=$true)]
    $Array = ''
)

foreach ($member in $Array){
    Write-Host "TEST"

    $server = $member["server"]
    $path = $member["path"]
    $key = $member["key"]

    Write-Host $server
    Write-Host $path
    Write-Host $key
}

當我提供以下行作為輸入時,腳本僅顯示“ TEST”,而沒有其他內容,但是當我在腳本本身中使用完全相同的代碼定義$Array時,腳本將按預期工作。

@(@{"server" = "server1"; "path" = "\\path1"; "key" = "key1"}, @{"server" = "server2"; "path" = "\\path2"; "key" = "key2"}, @{"server" = "server3"; "path" = "\\path3"; "key" = "key3"})

預期的輸出是:

TEST
server1
\\path1
key1
TEST
server2
\\path2
key2
TEST
server3
\\path3
key3

這是我從Python背景第一次接觸PowerShell。

看來,如果此數組在命令行級別傳遞,則可以正常工作。 但是,如果腳本提示輸入並在此時輸入,則它將失敗。 我要去哪里錯了?

需要說明的是,以下代碼可以很好地工作,每個鍵的值都打印到控制台上。

$Array = @(@{"server" = "server1"; "path" = "\\path1"; "key" = "key1"}, @{"server" = "server2"; "path" = "\\path2"; "key" = "key2"}, @{"server" = "server3"; "path" = "\\path3"; "key" = "key3"})

foreach ($member in $Array){
    Write-Host "TEST"

    $server = $member["server"]
    $path = $member["path"]
    $key = $member["key"]

    Write-Host $server
    Write-Host $path
    Write-Host $key
}

我認為這可以歸結為當系統提示您輸入輸入時(通過在命令行上未指定參數的值),其讀取方式與使用Read-Host cmdlet的方式類似。 該cmdlet的輸出是[System.String][System.Security.SecureString]

這樣,它不是一個適當對象的腳本/函數輸入,而是一個長字符串。 如果在param()塊之后向腳本添加調試行,則可以看到區別:

Write-Debug ($Array | Out-String)

在運行腳本之前,需要在控制台上設置$DebugPreference="Continue" ,以查看調試輸出。 運行腳本時,應該看到使用提示輸入的區別。

就個人而言,我將不費勁地從控制台提示符處收集“復雜”數據,並嘗試確保已在命令行中輸入數據的方法,就像您已經嘗試過的那樣。

您需要傳遞這樣的參數:

.\1.ps1 @(@{"server" = "server1"; "path" = "\\path1"; "key" = "key1"}, @{"server" = "server2"; "path" = "\\path2"; "key" = "key2"}, @{"server" = "server3"; "path" = "\\path3"; "key" = "key3"})

使用ISE時,該參數將作為字符串處理,因為您實際上傳遞了一個字符串,並且PowerShell語法未應用於該字符串。 您可以通過在腳本中添加$Array.GetType().Name來進行驗證。

如果您正確定義變量,會有所幫助:

[System.Collections.Generic.Dictionary``2[System.String,System.String][]] Array

但是,UI實際上是設計用來傳遞字符串或字符串數​​組而不是更復雜的結構的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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