繁体   English   中英

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

[英]How to declare global variable using Set-Variable in PowerShell?

考虑下面的代码:

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

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

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

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

function Manage-SecondAdmin {
    Close-Session
    Open-Session
}

$session = Open-Session
$session = Manage-SecondAdmin
...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM