我正在尝试编写一个简单的函数,当邮箱存在于我的 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-Null
尾Import-PSSession