为什么Powershell在删除所有Pssession并添加新的命令后不导入交换命令?



上下文

我创建了一个小的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 =,以便会话在脚本外部可用。

相关内容

  • 没有找到相关文章

最新更新