[英]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"
筆記:
$logPath
,但它會嘗試修改$logPaths
- 當然這不會按預期工作,因為最后的額外的s
[ref]
.value
添加到引用變量來訪問參考值 另請參閱此處幾乎相同的先前問題: Powershell將參數值傳遞給參數並返回
您抱怨的問題不是代碼中的第一個問題。 您正在使用函數LoadLogTrailerConfig
而無需在使用之前定義它。 所以,你必須先糾正這個失誤。 在更正之后,您的代碼將在沒有語法錯誤的情況下運行,但從邏輯上講 ,它仍將呈現不需要的輸出,但解釋將很簡單: 數組是一個可模擬的引用對象 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.