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

Mat*_*ram 7 arrays powershell pass-by-reference

目前,我试图通过引用我编写的函数传入两个数组项,该函数将数据加载到这些数组中.但是,一旦此函数失去作用域,数组将显示为空白.

如果我使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这对我不起作用?

And*_*ykh 9

我修改了你的例子:

$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"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 在PowerShell中调用函数的语法不同
  • 您需要首先定义您的函数,然后不要反过来调用
  • 确保使用正确的参数名称.你的函数接受了$logPath,但它会尝试修改$logPaths- 当然,由于s最后的额外功能,它不能按预期工作
  • 您需要[ref]在函数定义和函数调用中使用它们
  • 您需要通过添加.value到引用变量来访问参考值

另请参阅此处几乎相同的先前问题:Powershell将参数值传递给参数并返回