如何解决在 Powershell 上以编程方式进行身份验证时无法运行 Skype 命令
我在构建 Powershell 脚本时遇到了一个奇怪的问题。我想以编程方式连接到 Microsoft Teams 并执行一些 Skype for business online 命令。
当我只是在终端上做的时候
Connect-MicrosoftTeam
并得到提示并导入我的凭据,一切正常,但我需要以编程方式进行。
我正在针对 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
这样的命令并正确返回信息。但是,当我尝试运行像
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/
应该让你开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。