【问题标题】:Determine if connect-msolservice has already been successfully called判断connect-msolservice是否已经被成功调用
【发布时间】:2012-10-10 06:12:21
【问题描述】:

我正在使用 PowerShell 编写 Office 365 辅助工具,我认为这是一个我找不到答案的简单问题。如何判断Connect-MsolService 创建的连接是否存在且处于活动状态?必须有某种方法可以知道,因为其他 cmdlet 可以检查,我只是不知道那是什么方法,而且我没有找到它。

【问题讨论】:

    标签: powershell office365


    【解决方案1】:

    这是我的解决方案。

    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
    }
    

    【讨论】:

    • 感谢您的回答。这感觉就像是同一模式的基本变体——但读起来更简洁。
    【解决方案2】:

    Connect-MsolService 连接后返回一个对象,据我所知,不会添加新变量。也许您可以通过运行其中一个模块命令并根据命令的执行结果来确定:

    Get-MsolDomain -ErrorAction SilentlyContinue
    
    if($?)
    {
        "connected"
    }
    else
    {
        "disconnected"
    }
    

    【讨论】:

    • 嗯,这似乎有点草率...... Microsoft cmdlet 必须知道某些事情会引发错误,但它可能是内部禁区的东西?
    • 我不知道,目前我只能提供这种解决方法。
    • 好的,让我们先搁置一会儿,看看是否有人想出了更干净的方法。如果不是,我会接受,因为这是一种方法。
    • 足够公平@MikeBaz,深入研究:)
    • 对于它的价值,模块在这里写日志:$env:LOCALAPPDATA\Microsoft\Office365\Powershell
    【解决方案3】:

    我知道这是一个老问题,但我就是这样做的:

    # 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 行。

    【讨论】:

      【解决方案4】:

      您所要做的就是get-pssession,它会根据配置名称通知您是否连接到 msol 服务。如果您想自动化连接过程,您可以设置一个 if else 循环来检查配置名称和状态。如果您想要这样的示例,请告诉我,我已在我构建的 Web 应用程序上进行了此设置,以在 Office 365 上查询用户信息并将其显示在网页上。

      【讨论】:

      • 我刚刚尝试过 - 连接 Connect-MsolService,然后连接 Get-PSSession。什么都没有回来。您是否正在考虑使用您创建的显式 PS 会话的 Exchange Online 部分?
      • 是的,也许我对您要做什么感到困惑。您在这里的最终目标是什么,您要创建什么类型的工具,这将帮助我为您提供您正在寻找的答案
      • 在不涉及大量细节的情况下,该工具正在配置 Office 365 域和联合。如果已经有工作连接,我不想费心要求连接凭据。连接的寿命甚至超过了脚本的生命周期,因此即使在工具的新实例上也需要检查。我不想要求凭据并调用 Connect-MsolService,除非我必须这样做。
      【解决方案5】:

      Connect-MsolService 将一个名为 MSOnline 的模块导入到 powershell 中,因此只需检查该模块是否存在:

      Get-Module -Name MSOnline
      

      【讨论】:

      • 你有这个倒退 - 正在导入的模块使命令可用,而不是相反。
      猜你喜欢
      • 2011-08-26
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多