我目前正在学习如何使用 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-AzureAccount
和Add-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
) 却没有。