我遇到了一个问题,当远程访问 Exchange 2016 服务器时,简单的命令(例如 Get-Module)不存在。
我正在运行的命令是:
Invoke-Command -ConfigurationName Microsoft.Exchange -ConnectionUri http://SERVERNAME/powershell -Authentication Kerberos -Credential $cred -ScriptBlock { Get-Module }
结果是:
The term 'Get-Module' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
+ CategoryInfo : ObjectNotFound: (Get-Module:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
+ PSComputerName : SERVERNAME
其他核心命令(如 Get-Command)按预期工作 - 包括 Exchange 命令(Get-Mailbox 等)。
我所做的唯一更改是将 Powershell 站点的 IIS 中的 PSLanguageMode 更改为“FullLanguage”。撤消此更改(并重新启动适用的池和站点)不会影响结果。
我并不经常处理 Exchange 或 PowerShell,因此非常感谢您的任何建议。
答案1
Exchange 服务器被设计为受限端点。会话配置Microsoft.Exchange
是具有有限公开方法的基本配置架构。由于 Exchange 服务器暴露于外部世界,因此设计人员非常注重安全性。您尝试使用的命令在现有上下文中很简单,因为您指定了实例化所需的环境。
强烈建议您在现有会话配置(用于远程)内工作或在本地运行代码以访问所有方法。但是,如果您的风险承受能力允许,您可以创建自定义会话配置架构使用您在此处找到的信息。