如何在PowerShell中使用Set-Variable声明全局变量



请考虑以下代码:

Set-Variable -Name session -Value $null -Scope Global
function Manage-SecondAdmin {
Close-Session
$session = Open-Session
}
$session = Open-Session
Manage-SecondAdmin
$x = Invoke-Session $session
# Outputs success string or nothing in case of failure
if ($x) {
# Does not come here
Write-Host "Success"
} else {
# Comes here
Write-Host "Invalid session ID"
$session = Open-Session
}
$x = Invoke-Session $session
# Now successful response

当我使用上面的代码时,它总是按照命令中的说明转到 else 部分。我知道关键字"全球"。当我使用"设置变量"时需要它吗?最好的方法是什么?

Manage-SecondAdmin中的$session$global:session不同。显然,Close-Session(无论该 cmdlet 是什么)关闭现有会话,后续Open-Session打开一个新会话,然后将其分配给函数范围内的局部变量$session,而全局变量$session仍保留对当前关闭会话的引用。您可以通过将$session更改为$global:session来解决此问题,但是在嵌套上下文中操作全局变量是一种不好的做法。别这样。

让函数返回新会话,并将返回值分配给调用函数的变量:

function Manage-SecondAdmin {
Close-Session
Open-Session
}
$session = Open-Session
$session = Manage-SecondAdmin
...

PowerShell 中通常不需要使用Set-Variable预定义变量。

相关内容

  • 没有找到相关文章

最新更新