函数完成后导入-PsSession不可用

时间:2017-05-16 23:07:22

标签: powershell

我有一个创建远程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可用?

顺便说一句,如果我在函数外部运行命令,这不是问题。

2 个答案:

答案 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(如果它健康且可用)。