Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 确定是否已成功调用connect msolservice_Powershell_Office365 - Fatal编程技术网

Powershell 确定是否已成功调用connect msolservice

Powershell 确定是否已成功调用connect msolservice,powershell,office365,Powershell,Office365,我正在PowerShell中编写一个Office 365帮助工具,我想这是一个我找不到答案的简单问题。如何判断由Connect MsolService创建的连接是否存在并处于活动状态?一定有办法知道,因为其他cmdlet可以检查,我只是不知道那是什么方法,而且我也没有运气找到它。Connect MsolService连接后返回一个对象,据我所知,没有添加新变量。也许您可以通过运行其中一个模块命令并根据命令的执行结果来确定: Get-MsolDomain -ErrorAction Silently

我正在PowerShell中编写一个Office 365帮助工具,我想这是一个我找不到答案的简单问题。如何判断由
Connect MsolService
创建的连接是否存在并处于活动状态?一定有办法知道,因为其他cmdlet可以检查,我只是不知道那是什么方法,而且我也没有运气找到它。

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

Get-MsolDomain -ErrorAction SilentlyContinue

if($?)
{
    "connected"
}
else
{
    "disconnected"
}

您所要做的就是
获取pssession
,这将让您知道是否根据配置名称连接到msol服务。如果要自动化连接过程,可以设置If-else循环来检查配置名称和状态。请告诉我,如果您想要一个这样的例子,我已经在一个web应用程序上设置了它,我创建了该应用程序,用于在Office 365上查询用户信息并将其显示在网页上。

这是我的解决方案

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
}

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

# 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
。这将防止它尝试使用不正确的凭据连接MsolService线路。

连接MsolService
将名为MSOnline的模块导入powershell,因此只需检查模块是否存在:

Get-Module -Name MSOnline

嗯,看起来有点邋遢。。。Microsoft cmdlet一定在做一些事情来知道如何抛出错误,但可能是内部禁止的东西?我不知道,目前我只能提供这些解决方法。好的,让我们暂时搁置一下,看看是否有人想出了更干净的方法。如果不是的话,我会接受这一点,因为这是一种方法。公平地说@MikeBaz,深入:)值得一提的是,模块正在这里写日志:$env:LOCALAPPDATA\Microsoft\Office365\PowershellI刚刚尝试了这个方法-连接到Connect MsolService,然后获取PSSession。什么都不会回来。您是否正在考虑Exchange Online部分,其中使用您创建的显式PS会话?是的,也许我不知道您想做什么。你的最终目标是什么,你想创建什么类型的工具,这将帮助我给出你想要的答案,而无需详细说明,该工具正在配置Office 365域和联盟。如果已经有一个工作连接,我不想麻烦要求提供连接凭据。连接甚至比脚本的生命周期还要长,因此即使在工具的新实例上也需要检查连接。除非必须,否则我不想索要凭据并致电Connect MsolService。谢谢您的回答。这感觉像是同一模式的一个基本变体,但它读起来更清晰。你可以向后看,导入的模块使命令可用,而不是相反。