使用 ref 关键字传递变量的引用

3
我尝试在PowerShell中通过引用传递failedFlag:
函数调用:
$failedFlag = $false

$message += createMSSQLBak -failedFlag ([ref]$failedFlag) -serverName "X\X" -backupDirectory "D:\ms-sql-backup\backup\X" -daysToStoreBackups 90

函数原型:
function createMSSQLBak ([ref]$failedFlag, $serverName, $backupDirectory, $daysToStoreBackups)
{
 [...]
 $failedFlag = $true
 [...]
}

在我的函数外部,$failedFlag始终为false。 函数原型或调用有问题吗?

除了在调用时需要使用冒号而不是参数名称和值之间的空格进行绑定之外,您为什么不使用[Switch]参数呢? - Nathan Tuggy
你能详细解释一下吗? - Matthias
使用例如 [ref][Switch]$FailedFlag。但是,经过进一步的思考,在这里没有真正的理由这样做,所以忽略那一部分即可。 - Nathan Tuggy
1个回答

4

Get-Help about_Ref 有一些有用的代码示例。它们在传递中使用.Value,但实际上没有明确提到它,但这是您在此处缺少的关键。

function createMSSQLBak ([ref]$failedFlag, $serverName, $backupDirectory, $daysToStoreBackups)
{
    [...]
    $failedFlag.Value = $true
    [...]
}

好了,这就可以了。事实证明,[ref]实际上将其变为System.Management.Automation.PSReference类型的变量,它是一个只有一个属性的通用类。它在MSDN甚至PowerShell内部帮助文件中的文档都不是很完整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接