我编写了一套PowerShell脚本,可以使用Azure Resource Manager来构建我的IAAS基础架构。所有这些脚本均旨在通过我们使用的连续集成框架运行非相互作用。在powershell脚本中,在调用诸如new-azureresourcegroup之类的命令之前,我首先检查运行脚本的机器通过运行get-azuresubscription和get-azureAccount对Azure进行身份验证。如果发现它没有经过身份验证,那么它将运行一系列的CMDLET,例如Import-AzurePublishSettingsFile,select-azuresubscription,add-azureAccount等。
大多数时候都可以正常工作,我能够每次更改订阅和凭据,脚本会注意到更改,并根据需要指向正确的订阅并重新认证。但是,一旦Azure帐户会话耗尽(我认为这需要12个小时),以上所有内容都将不起作用。如果我在此状态下运行类似New-AzureresourceGroup之类的东西,我将收到"未经授权"的消息。
发生这种情况后,唯一的解决方法是,如果我手动运行Add-azureaccount并手动输入我的凭据。完成此操作后,我的脚本将运行良好,直到下一个超时为止。
我已经读到,仅导入发布设置文件应该在此情况下工作,但是重新构图该文件似乎也行不通。超时后,还有其他人能够从PowerShell脚本从Powershell脚本进行身份验证?
我弄清楚了,这是我自己的愚蠢错误。我们公司有几个Azure订阅,为了不始终登录和退出订阅,我将自己的Azure帐户设置为所有这些帐户。对我来说不幸的是,我创建了两个AzureAutomation帐户...一个在我的Azure帐户下,另一个在订阅所有者帐户下。这导致了两个非常相似但略有不同的帐户:
azureautomationuser@adminnamecompanyname.onmicrosoft.comazureautomationuser@mynamecompanyname.onmicrosoft.com
一个是在订阅上设置为管理员,另一个不是。非Admin是我在PowerShell脚本中使用的一个,因此未经授权的消息是完全有效的。