目前我正在尝试通过引用我编写的函数传入两个数组项,该函数将数据加载到这些数组中。但是,一旦此函数失去作用域,数组就会显示为空白。
如果我使用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
}
}
为什么这对我不起作用?
答案 0 :(得分:5)
我修改了你的例子:
$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 passing argument values to parameters and back
答案 1 :(得分:0)
您正在抱怨问题不是代码中的第一个问题。您正在使用函数LoadLogTrailerConfig
,而无需在使用之前对其进行定义。所以,你必须先纠正这个失误。在更正之后,您的代码将在没有语法错误的情况下运行,但从逻辑上讲,它仍会显示不需要的输出,但解释将很简单: 数组是一个可模拟的引用对象