我正在尝试编写一个简单的函数,当我的 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”输出(类型为bool),但我真的不明白为什么脚本级别的变量也有“tmp_xxx”值,而且,它是一个数组。我花了一些时间在这上面,我意识到删除 Import-PSSession 行(并保持 PSSession 从脚本上一次执行中处于活动状态),输出如预期:
MyVariableInFunction: True
MyVariableInScript: True
我完全无法弄清楚它发生的原因。有人可以建议吗?
从这里, Import-PSSession 输出一个 System.Management.Automation.PSModuleInfo 对象。
要修复您的功能,请添加
| Out-Null
到Import-PSSession
行尾