Azure Cmdlet Add-AzureRmAccount 无法通过公司线路运行

Azure Cmdlet Add-AzureRmAccount 无法通过公司线路运行

我目前正在学习如何使用 powershell 资源管理 cmdlet 创建 azure 环境。
传统的工作方式没有问题,我可以使用Add-AzureAccount,它允许我访问我的订阅。

但是,使用新的资源管理器 cmdlet 时,Add-AzureRmAccount我会收到两个错误之一。

当使用存储的凭据$Cred = Get-Credentials,然后使用登录时,Add-AzureRmAccount -Credential $cred我收到以下错误:

访问 ws 元数据交换失败。

使用登录提示时。这意味着我只需输入Add-AzureRmAccount,它就会将我转发到我的公司 SSO 页面。我成功登录。我收到以下错误:

发送请求时发生错误。

当我尝试在家中使用 cmdlet 时,使用 vpn 连接到我之前使用的同一台笔记本电脑。我可以使用Add-AzureRmAccount并按照登录提示完美连接。使用存储的$cred凭据仍然失败,并出现元数据交换错误。

我假设存储凭据方法失败,因为它无法在没有交互式提示的情况下重定向到 SSO。
但是我不确定是什么原因导致交互式登录失败,因为我可以清楚地访问 SSO,并且 cmdletAdd-AzureAccount在同一台机器上运行。

Add-AzureAccountAdd-AzureRmAccount可能导致此问题出现的 cmdlet之间有何区别?

更新:

完整的堆栈跟踪错误是:

Message        : An error occurred while sending the request.
Data           : {}
InnerException : System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required.
                    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
                    at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
TargetSite     : Void ThrowForNonSuccess(System.Threading.Tasks.Task)
StackTrace     :    at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
                    at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
                    at Microsoft.Azure.Subscriptions.TenantOperationsExtensions.List(ITenantOperations operations)
                    at Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient.ListAccountTenants(AzureAccount
                 account, AzureEnvironment environment, SecureString password, ShowDialog promptBehavior)
                    at Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient.Login(AzureAccount account,
                 AzureEnvironment environment, String tenantId, String subscriptionId, String subscriptionName,
                 SecureString password)
                    at Microsoft.Azure.Commands.Profile.AddAzureRMAccountCommand.ProcessRecord()
                    at System.Management.Automation.Cmdlet.DoProcessRecord()
                    at System.Management.Automation.CommandProcessor.ProcessRecord()
HelpLink       :
Source         : Microsoft.Threading.Tasks
HResult        : -2146233088

看起来我的错误与防火墙有关。
我不确定为什么一个命令 ( Add-AzureRmAccount) 遇到错误而旧版本 ( Add-AzureAccount) 却没有。

答案1

根据科林1337差异可能是基于 Web 的 API。
身份验证错误与代理服务器身份验证不正确有关。

类似的问题堆栈溢出另一个基于 Web 的 API cmdlet 也出现了类似的错误,提供了解决方案。
答案就在那里我只需在脚本开始处添加以下代码:

[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

相关内容