PowerShell 通过引用函数传递两个数组

PowerShell passing two arrays by reference to a function

目前我正在尝试通过引用我编写的函数来传递两个数组项,该函数将数据加载到这些数组中。但是,一旦此函数失去作用域,数组就会显示为空白。

如果我使用 ref 关键字将它们传递到函数中,第一个数组会正确加载。然而,第二个数组给出了一个错误,说我不能在上面使用添加运算符。

$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 passing argument values to parameters and back

您抱怨的问题不是您代码中的第一个问题。您正在使用函数 LoadLogTrailerConfig 而未在使用前对其进行定义。所以,你必须先纠正这个错误。更正后,您的代码将 运行 没有语法错误,但逻辑上它仍然会出现不需要的输出,但解释会很简单: array is an imutable reference对象.