上下文
我创建了一个小的Powershell脚本,允许您在2个Exchange Server(Pssession到2个服务器(之间切换。 在脚本的Begin
部分中,我删除了所有现有的 pssessions(它位于默认的 Exchange 2010 服务器上(。
# Remove all Ps-Sesssions
Get-PSSession | Remove-PSSession
然后在Process
部分中,我这样做:
Process
{
# Choose Server:
# Default server
$server = "2010"
if ($ExchangeVersion -eq "2016") {
$server = "2217ex0010at01"
} elseif ($ExchangeVersion -eq "2010") {
$server = "2217exlimbx01"
} else {
Write-Host "Server wurde nicht gefunden, gibt 2010 oder 2016 ein"
}
# Add Pssession and import it
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/powershell
Import-PSSession $s -AllowClobber
}
问题所在
当我启动Powershell时,它会将pssession导入2010服务器。一切正常。我有像get-mailbox
这样的命令 但是当我像这样运行脚本时Set-ExchangeServer -ExchangeVersion "2016"
一切似乎都很好。但是当我尝试任何交换命令时,它将不存在。
我试过什么
我手动输入了脚本中的代码,将会话导入 2016。这就是奇怪的部分。当我手动执行此操作时,它可以工作,并且我拥有所有命令。
此问题的原因可能是什么?
我为自己做了简单的函数来删除以前的交换会话,它可能会对您有所帮助。
可能您没有删除tmp*...
模块...
对于内部部署:
Function Remove-LocalExchangeShell
{
if ($LocalSession = Get-PSSession | ? {$_.ComputerName -match 'exchSvrName'}) {Remove-PSSession $LocalSession}
if ($TmpModule = Get-Module -Name tmp*) {Remove-Module $TmpModule}
}
对于 Office365:
Function Remove-365ExchangeShell
{
if ($365Session = Get-PSSession | ? {$_.ComputerName -match 'Outlook'}) {Remove-PSSession $365Session}
if ($TmpModule = Get-Module -Name tmp*) {Remove-Module $TmpModule}
}
在执行New-PSSession
之前运行所需的一个
我认为根本原因是范围问题。
尝试将$s =
更改为$global:s =
,以便会话在脚本外部可用。