我有一个创建远程PS会话的功能。然后我导入会话,并且代码运行时所有导出的命令都可用于其他函数。当函数完成时,存在“可用的”PS会话,但之后没有任何导出的命令可用。这是一个例子:
Function DoSomething{
$lyncsession = New-CsOnlineSession -Credential (Get-Credential -Message "Authenticate to Skype for Business Online")
$remoteSession = Import-PSSession $lyncsession -AllowClobber | Out-Null
}
如果我想再次运行该功能,我需要拆除旧的PSSession并创建一个新的(重新进行身份验证)。
有没有办法在函数中创建PSSession并在函数完成后使导出的cmdlet可用?
顺便说一句,如果我在函数外部运行命令,这不是问题。
答案 0 :(得分:1)
如果您希望功能或脚本在会话范围内运行,您可以点源它。这会将变量放在当前作用域中,否则如您所知,它们将位于function scope中,并在函数完成后不可用。
. DoSomething
否则,您可以手动将函数内部的变量范围设置在不同的范围内。范围界定为全局和脚本范围的示例
Function DoSomething{
$script:lyncsession = New-CsOnlineSession -Credential (Get-Credential -Message "Authenticate to Skype for Business Online")
$global:remoteSession = Import-PSSession $lyncsession -AllowClobber | Out-Null
}
答案 1 :(得分:0)
定义一个全局变量并不能解决这个问题。我不得不简单地重新导入PSSession(如果它健康且可用)。