簡體   English   中英

PowerShell通過引用函數傳遞兩個數組

[英]PowerShell passing two arrays by reference to a function

目前我試圖通過引用我編寫的函數來傳入兩個數組項,該函數將數據加載到這些數組中。 但是,一旦此函數失去作用域,數組將顯示為空白。

如果我使用ref關鍵字將它們傳遞給函數,則第一個數組會正確加載。 但是,第二個數組給出一個錯誤,指出我不能在其上使用add運算符。

$logConfigPath = "C:\Testing\Configuration\config.xml"

#### VARIABLES RELATING TO THE LOG FILE

# Contains the log path and log file mask
$logPaths = @()
$logFileMasks = @()

#### FUNCTION CALLS
LoadLogTailerConfig($logConfigPath, $logPaths, $logFileMasks)

"$logPaths"
"$logFileMasks"


function LoadLogTailerConfig($logConfigPath, $logPath, $logFileMasks)
{
    Write-Debug "Loading config file data from $logConfigPath"

    [xml]$configData = Get-Content "C:\Testing\Configuration\config.xml"

    foreach ($log in $configData.Logs.Log) {

        $logPaths += $log.FilePath
        $logFileMasks += $log.FileMask
    }
}

為什么這對我不起作用?

我修改了你的例子:

$logConfigPath = "C:\Testing\Configuration\config.xml"

#### VARIABLES RELATING TO THE LOG FILE

# Contains the log path and log file mask
$logPaths = @()
$logFileMasks = @()


function LoadLogTailerConfig($logConfigPath, [ref]$logPaths, [ref]$logFileMasks)
{
    Write-Debug "Loading config file data from $logConfigPath"

    #[xml]$configData = Get-Content "C:\Testing\Configuration\config.xml"

    foreach ($log in 1..10) {

        $logPaths.value += $log
        $logFileMasks.value += $log
    }
}

#### FUNCTION CALLS
LoadLogTailerConfig $logConfigPath ([ref]$logPaths) ([ref]$logFileMasks)

"$logPaths"
"$logFileMasks"

筆記:

  • 在PowerShell中調用函數的語法不同
  • 您需要先定義您的函數,然后再調用
  • 確保使用正確的參數名稱。 你的函數接受$logPath ,但它會嘗試修改$logPaths - 當然這不會按預期工作,因為最后的額外的s
  • 您需要在函數定義和函數調用中使用[ref]
  • 您需要通過將.value添加到引用變量來訪問參考值

另請參閱此處幾乎相同的先前問題: Powershell將參數值傳遞給參數並返回

您抱怨的問題不是代碼中的第一個問題。 您正在使用函數LoadLogTrailerConfig而無需在使用之前定義它。 所以,你必須先糾正這個失誤。 在更正之后,您的代碼將在沒有語法錯誤的情況下運行,但從邏輯上講 ,它仍將呈現不需要的輸出,但解釋將很簡單: 數組是一個可模擬的引用對象

暫無
暫無

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

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