当我在内部启动 PSSession 时,Powershell 函数返回的值会发生变化

当我在内部启动 PSSession 时,Powershell 函数返回的值会发生变化

我正在尝试编写一个简单的函数,当邮箱存在于我的 Exchange 服务器上时,该函数返回 $true,当邮箱不存在时,该函数返回 $false。该函数本身会启动对 Exchange 服务器的 PSSesssion:

function Check-MyMailbox 
{
  Param (
    [Parameter(Mandatory=$true)]
    [string] $Identity
  )

  $ExchangeOnPremSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange.domain.loc/PowerShell/ -Credential $MyCredentials -Authentication Kerberos
  Import-PSSession -Session $ExchangeOnPremSession -Verbose -AllowClobber -DisableNameChecking -ErrorAction Stop

  $CheckUserMailbox = Get-Mailbox -Identity $Identity -ErrorAction SilentlyContinue
  if ($CheckUserMailbox) {
    $ReturnUserMailbox = $true
  } else {
    $ReturnUserMailbox = $false
  }
  Write-Host 'My Variable In Function:' $ReturnUserMailbox
  return $ReturnUserMailbox
}

$MyVariableInScript = Check-MyMailbox -Identity [email protected]
Write-Host 'My Variable In Script:' $MyVariableInScript

我获得的输出是:

MyVariableInFunction: True
MyVariableInScript: tmp_kku2aeae.wyu True

我同意该函数生成的“True”输出(其类型为布尔值)但我真的不明白为什么脚本级别的变量也有“tmp_xxx”值,而且它是一个大批。我花了一些时间,我意识到删除 Import-PSSession 行(并保持 PSSession 在脚本上次执行时处于活动状态),输出符合预期:

MyVariableInFunction: True
MyVariableInScript: True

我完全不明白为什么会发生这种情况。有人能给出建议吗?

答案1

这里,Import-PSSession 输出一个 System.Management.Automation.PSModuleInfo 对象。

要修复您的功能,请添加到行| Out-NullImport-PSSession

相关内容