确定命令属于哪个 PSSession?

确定命令属于哪个 PSSession?

晚上好

一些 PowerShell 命令可在线或本地使用,例如:Get-MailContact

有没有办法识别本地服务器或在线 Exchange 是否正在应答此类命令的调用?

我本来期望能够询问 PSSession 它响应什么命令,但这似乎是一个转移注意力的花招。

非常感谢您的帮助!问候,托马斯

答案1

使用导入的 cmldets 时使用前缀。

导入 PSSession

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/import-pssession?view=powershell-7.1

导入 PSSession [-字首 ] [-DisableNameChecking] [[-命令名称] <字符串[]>] [-AllowClobber] [-参数列表 <对象[]>] [-命令类型 ] [-模块 <字符串[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [[-格式类型名称] <字符串[]>] [-证书 ] [-会话] []

您可以使用您选择的任何前缀。

例子):

Import-PSSession -Session $ExchangeOnPremSession -Prefix 'EXP'
Import-PSSession -Session $ExchangeOnlineSession -Prefix 'EXO'
Import-PSSession -Session $SkypeOnlineSession -Prefix 'SOL'
Import-PSSession -Session $SqlSession -Prefix 'SQL'
Import-PSSession -Session $WapSession -Prefix 'WAP'

这样,使用 Exchange Online 时,您的 cmdlet 将显示为 Get-ExoMail,而本地将显示正常的 Get-Mail cmdlet。或者您可以明确地使用 EXO 表示在线,EXP 表示本地。

因此,用例将是:

Get-ExoMailbox 

或者

Get-ExpMailbox

... 有关 cmdlet 的所有其他内容都相同。

这个前缀并不新鲜,您也可以对自定义的东西(变量、函数等)执行此操作,以便于发现、使用和处理。

***笔记:

新的 Exchange Online 在新模块中已经实现了这一点,因此不需要前缀。***

获取 EXOMailbox

模块:ExchangePowerShell

适用于:Exchange OnlineApplies to: Exchange Online

此 cmdlet 仅在 Exchange Online PowerShell V2 模块中可用。有关详细信息,请参阅关于 Exchange Online PowerShell V2 模块。

https://docs.microsoft.com/en-us/powershell/module/exchange/get-exomailbox?view=exchange-ps

答案2

您可以运行以下命令来查看该命令正在使用哪个模块:

(Get-Command -Name <Cmdlet>).ModuleName

  1. 如果是 Exchange Online 命令(基本):

在此处输入图片描述

  1. 如果是 Exchange Online 命令(V2):

在此处输入图片描述

  1. 如果它是本地 Exchange 命令,则 PowerShell 中将有一个服务器 fqdn 输出:

在此处输入图片描述

答案3

您可以尝试这样的操作:

(Get-Command *exch*).source

如果命令来自远程会话,它将响应类似如下内容:

tmp_rusnwadj.rm5

相关内容