【发布时间】:2012-10-10 06:12:21
【问题描述】:
我正在使用 PowerShell 编写 Office 365 辅助工具,我认为这是一个我找不到答案的简单问题。如何判断Connect-MsolService 创建的连接是否存在且处于活动状态?必须有某种方法可以知道,因为其他 cmdlet 可以检查,我只是不知道那是什么方法,而且我没有找到它。
【问题讨论】:
标签: powershell office365
我正在使用 PowerShell 编写 Office 365 辅助工具,我认为这是一个我找不到答案的简单问题。如何判断Connect-MsolService 创建的连接是否存在且处于活动状态?必须有某种方法可以知道,因为其他 cmdlet 可以检查,我只是不知道那是什么方法,而且我没有找到它。
【问题讨论】:
标签: powershell office365
这是我的解决方案。
try
{
Get-MsolDomain -ErrorAction Stop > $null
}
catch
{
if ($cred -eq $null) {$cred = Get-Credential $O365Adminuser}
Write-Output "Connecting to Office 365..."
Connect-MsolService -Credential $cred
}
【讨论】:
Connect-MsolService 连接后返回一个对象,据我所知,不会添加新变量。也许您可以通过运行其中一个模块命令并根据命令的执行结果来确定:
Get-MsolDomain -ErrorAction SilentlyContinue
if($?)
{
"connected"
}
else
{
"disconnected"
}
【讨论】:
我知道这是一个老问题,但我就是这样做的:
# Only run if not already connected
if(-not (Get-MsolDomain -ErrorAction SilentlyContinue))
{
$O365Cred = Get-Credential -Message "Please provide credentials for Microsoft Online"
$O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection -ErrorAction Stop
Connect-MsolService –Credential $O365Cred
Import-PSSession $O365Session | Out-Null
}
如果Connect-MsolService 行出现在$O365Session = 行之前,那么输入不正确的凭据将导致您下次运行时出现误报(它会认为您已连接,即使您没有连接,因为凭据是错了。)这样做可以防止发生这种小问题。
还要注意$O365Session = New-PSSession 行末尾的-ErrorAction Stop。这可以防止它使用不正确的凭据尝试 Connect-MsolService 行。
【讨论】:
您所要做的就是get-pssession,它会根据配置名称通知您是否连接到 msol 服务。如果您想自动化连接过程,您可以设置一个 if else 循环来检查配置名称和状态。如果您想要这样的示例,请告诉我,我已在我构建的 Web 应用程序上进行了此设置,以在 Office 365 上查询用户信息并将其显示在网页上。
【讨论】:
Connect-MsolService 将一个名为 MSOnline 的模块导入到 powershell 中,因此只需检查该模块是否存在:
Get-Module -Name MSOnline
【讨论】: