在 Powershell 上以编程方式进行身份验证时无法运行 Skype 命令

问题描述

我在构建 Powershell 脚本时遇到了一个奇怪的问题。我想以编程方式连接到 Microsoft Teams 并执行一些 Skype for business online 命令。

当我只是在终端上做的时候

Connect-MicrosoftTeam 并得到提示并导入我的凭据,一切正常,但我需要以编程方式进行。

我使用以下权限注册一个应用

API Registration permissions

我正在针对 Azure AD 和 Graph 进行身份验证:

#Connect to Graph
$Body = @{    
Grant_Type    = "client_credentials"
Scope         = "https://graph.microsoft.com/.default"
client_Id     = $ApplicationID
Client_Secret = $AccessSecret
} 

$ConnectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token" -Method POST -Body $Body
$token = $ConnectGraph.access_token
#Connect to AD
$uri = "https://login.microsoftonline.com/${tenant_id}/oauth2/token"
$body = @{grant_type='refresh_token';resource='https://graph.windows.net';client_id=$clientId;refresh_token=$refresh_token}
$result = Invoke-RestMethod -Method Post -Uri $uri -Body $body
$accesstoken = $result.access_token

然后我跑

Connect-MicrosoftTeams -AadAccesstoken $accesstoken -MsAccesstoken $token -AccountId $account

它不会抛出错误,正常工作。我生成Get-Team 这样的命令并正确返回信息。但是,当我尝试运行像

这样的Skype命令时
 Get-CsOnlineVoiceUser

我收到错误

Get-CsOnlinesession : Run Connect-MicrosoftTeams before running cmdlets.
At C:\Program Files\WindowsPowerShell\Modules\MicrosoftTeams\2.3.1\net472\SfBORemotePowershellModule.psm1:63 char:22
+     $remoteSession = & (Get-CsOnlinesessionCommand)
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-CsOnlinesession],UnauthorizedAccessException
    + FullyQualifiedErrorId : UnauthorizedAccessException,Microsoft.Teams.ConfigApi.Cmdlets.GetCsOnlinesession
 
Invoke-Command : Cannot validate argument on parameter 'Session'. The argument is null or empty. Provide an argument that is not null or empty,and then try the command again.
At C:\Program Files\WindowsPowerShell\Modules\MicrosoftTeams\2.3.1\net472\SfBORemotePowershellModule.psm1:10006 char:38
+ ...    -Session (Get-PSImplicitRemotingSession -CommandName 'Get-CsOnline ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Invoke-Command],ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ParameterargumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand

我错过了什么吗?我使用的是 2.3.1 团队模块。

谢谢!

解决方法

这有点棘手,但可以实现。

我建议您阅读这篇博文以获得确切的说明和代码示例: https://paulobrien.co.nz/2020/06/29/s4b-online-powershell-modern-auth/

应该让你开始。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...