调用新AzureRmADApplication时无法将TokenCloudCredentials强制转换为AccessTokenCredential

调用新AzureRmADApplication时无法将TokenCloudCredentials强制转换为AccessTokenCredential,azure,azure-powershell,azure-resource-manager,service-principal,Azure,Azure Powershell,Azure Resource Manager,Service Principal,我正在编写一个PowerShell部署脚本,它自动创建我的Azure资源和附带的ServicePrincipal 以下是我正在使用的代码,我已经测试过这些代码,并且在直接从PowerShell运行时可以使用最新的Azure 1.0.4 SDK模块: $ResourceGroupName = "my-resource-group" $ADAppIdentifierUri = [string]::Concat("https://", $ResourceGroupName, ".azurewebsit

我正在编写一个PowerShell部署脚本,它自动创建我的Azure资源和附带的ServicePrincipal

以下是我正在使用的代码,我已经测试过这些代码,并且在直接从PowerShell运行时可以使用最新的Azure 1.0.4 SDK模块:

$ResourceGroupName = "my-resource-group"
$ADAppIdentifierUri = [string]::Concat("https://", $ResourceGroupName, ".azurewebsites.net")

# Generate a password for the AD application
$ServicePrincipalPassword = [Guid]::NewGuid().ToString().Replace("-", "")

# Create the Azure AD Application and service principal, and only assign access to our resource group
$AzureADApplication = New-AzureRmADApplication -DisplayName $ResourceGroupName -HomePage $ADAppIdentifierUri -IdentifierUris $ADAppIdentifierUri -Password $ServicePrincipalPassword
在Visual Studio中使用ResourceGroup项目部署脚本运行此代码时,出现以下错误:

新AzureRmADApplication:无法将类型为“Microsoft.Azure.TokenCloudCredentials”的对象强制转换为类型为“Microsoft.Azure.Common.Authentication.AccessTokenCredential”

根据堆栈跟踪,异常是在命令New AzureRmADApplication开始时引发的,因此不幸的是,该异常在Azure SDK代码内部发生

我在以下文件中浏览了SDK的源代码,未找到任何细节:

我只能在此处找到一个在此链接遇到相同错误的人:

但是,那里的解决方案对我来说没有意义,因为我没有使用管理证书进行身份验证,并且我在manage.windowsazure.com网站上没有列出任何管理证书。

在AzureRMAD*cmdlet中使用基于令牌的身份验证时,这是一个问题(即bug)。从VS运行脚本时,VS使用您从VS登录中获得的令牌,以避免提示进行身份验证。要解决这个问题,您必须使用凭据在VS之外运行它

有一个内部工作项对此进行跟踪,但如果您想监控进度,可以在此处提交问题:

在AzureRMAD*cmdlet中使用基于令牌的身份验证时,这是一个问题(即错误)。从VS运行脚本时,VS使用您从VS登录中获得的令牌,以避免提示进行身份验证。要解决这个问题,您必须使用凭据在VS之外运行它


有一个内部工作项对此进行跟踪,但如果要监视进度,可以在此处提交问题:

您使用的是哪个版本的Visual Studio?我复制您的代码并使用
登录AzurerAccount
运行,它对我来说非常适合。我使用的是Visual Studio 2015和Azure PowerShell 1.2.1,我使用的是Visual Studio 2015和Azure PowerShell-2016年2月(1.2.1)。您使用的是哪种登录策略?Visual Studio自动生成的脚本使用Microsoft.Azure.Common.Authentication.AzureSession,并且该脚本使用Azure PowerShell 0.9样式的命令,该命令不适用于Azure PowerShell 1.2.1。我正在尝试找出如何利用VisualStudio的Azure会话登录。如果您共享您的代码,这将非常有用。我正在使用项目模板Cloud->Resource Group附带的样板文件Deploy-AzureResourceGroup.ps1脚本。我使用项目文件的实际部署选项运行脚本。我上面链接的代码片段可以放置在此文件中以测试环境。通过使用Get-AzureRmContext cmdlet,我能够确定在Visual Studio中运行Azure PowerShell时,帐户的身份验证是使用AccessToken完成的。但是,当我在PowerShell中使用登录AzureRmAccount进行身份验证时,它不会使用这样的令牌。我猜这是导致潜在问题的原因。您使用的是哪个版本的Visual Studio?我复制您的代码并使用
登录AzurerAccount
运行,它对我来说非常适合。我使用的是Visual Studio 2015和Azure PowerShell 1.2.1,我使用的是Visual Studio 2015和Azure PowerShell-2016年2月(1.2.1)。您使用的是哪种登录策略?Visual Studio自动生成的脚本使用Microsoft.Azure.Common.Authentication.AzureSession,并且该脚本使用Azure PowerShell 0.9样式的命令,该命令不适用于Azure PowerShell 1.2.1。我正在尝试找出如何利用VisualStudio的Azure会话登录。如果您共享您的代码,这将非常有用。我正在使用项目模板Cloud->Resource Group附带的样板文件Deploy-AzureResourceGroup.ps1脚本。我使用项目文件的实际部署选项运行脚本。我上面链接的代码片段可以放置在此文件中以测试环境。通过使用Get-AzureRmContext cmdlet,我能够确定在Visual Studio中运行Azure PowerShell时,帐户的身份验证是使用AccessToken完成的。但是,当我在PowerShell中使用登录AzureRmAccount进行身份验证时,它不会使用这样的令牌。我猜这是导致潜在问题的原因。是的,我也这么认为,我采用了从PowerShell手动调用部署脚本的方法,现在一切正常。我已经按照建议添加了问题。是的,我也这么认为,我采用了从PowerShell手动调用部署脚本的方法,现在一切都正常了