从 Windows 2012 管理 Exchange 2010

从 Windows 2012 管理 Exchange 2010

我们一直在从单独的 Windows 2008 R2 服务器管理 Exchange 2010,最近将管理计算机升级到 Windows 2012 R2。EMC 运行良好,但我在 shell 方面受到一定限制。一旦远程连接到 CAS 服务器,它就会降级到 PS 版本 2(如预期的那样),但随后我无法再在 2012 框上导入 ActiveDirectory 模块,因为它需要版本 3。这很糟糕,因为我有几个使用 AD 和 Exchange 模块的脚本。

是否可以/支持在 Windows 2012 上安装旧版本的 RSAT?或者至少获取旧版 ActiveDirectory 模块?

我知道这听起来像一个简单的问题,谷歌会回答,但我找不到。我想看看你们知道什么 :-)

编辑:
错误消息在底部,但我认为这没有帮助。问题似乎是模块需要版本 3。如果我在本地运行 powershell,它会成功导入。只有当我远程进入 exchange 服务器(并且它降到版本 2)时,它才会拒绝加载。

PS C:\> cat (Get-Module -Name ActiveDirectory).Path | select -First 10
@{
GUID="{43c15630-959c-49e4-a977-758c5cc93408}"
Author="Microsoft Corporation"
CompanyName="Microsoft Corporation"
ModuleVersion="1.0.0.0"
PowerShellVersion="3.0"
CLRVersion="4.0"
Copyright="© Microsoft Corporation. All rights reserved."
NestedModules="Microsoft.ActiveDirectory.Management"
RequiredAssemblies="Microsoft.ActiveDirectory.Management"

错误:

[PS] C:\>Import-Module ActiveDirectory
Import-Module : The 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ActiveDirectory\ActiveDirectory.psd1' 
module cannot be imported because its manifest contains one or more members
that are not valid. The valid manifest members are ('ModuleToProcess', 
blah, blah, blah... 'CmdletsToExport'). Remove the members that are not
valid ('HelpInfoUri'), then try to import the module again.
At line:1 char:14
+ Import-Module <<<<  ActiveDirectory
  + CategoryInfo          : InvalidData: 
    (C:\Windows\syst...eDirectory.psd1:String) [Import-Module], 
    InvalidOperationException
+ FullyQualifiedErrorId : Modules_InvalidManifestMember,
  Microsoft.PowerShell.Commands.ImportModuleCommand

答案1

我不相信您可以在 2012 上安装 Windows 7/2008 R2 RSAT,但如果您使用的帐户可以访问域控制器上的端点(或实际上安装了 AD 管理/RSAT 的任何其他服务器),并且启用了 PowerShell 远程处理,则可以使用隐式远程处理将这些 cmdlet 拉入您自己的会话中:

$SessionParameters = @{
    ComputerName = <server with AD management tools installed>
    Name = 'Microsoft.ActiveDirectory'
    Authentication = 'Kerberos'
    ErrorAction = 'Stop'
}
$Session = New-PSSession @SessionParameters

$InvokeProperties = @{
    ScriptBlock = { $env:ADPS_LoadDefaultDrive = 0; Import-Module -Name 'ActiveDirectory' }
    Session = $Session
    ErrorAction = 'Stop'
}
Invoke-Command @InvokeProperties

$ImportProperties = @{
    Session = $Session
    Module = 'ActiveDirectory'
    ErrorAction = 'Stop'
}
[void]Import-PSSession @ImportProperties

$Session

如果您想从单独的服务器运行脚本而不安装任何工具(因此能够管理任何 Exchange 环境),您可以对 Exchange 执行相同的操作:

$SessionParameters = @{
    ConnectionURI = "http://<Exchange server>/PowerShell"
    ConfigurationName = 'Microsoft.Exchange'
    Authentication = 'Kerberos'
    ErrorAction = 'Stop'
}
$Session = New-PSSession @SessionParameters

$ImportParameters = @{
    Session = $Session
    ErrorAction = 'Stop'
}
[void]Import-PSSession @ImportParameters

$Session

这还有一个额外的好处,就是不依赖于升级 Exchange 来使用新版本的 PowerShell(想到了 Exchange 2010 的 3+ 版本),但缺点是隐式远程处理引用的所有对象都会被反序列化。

相关内容