登录AzurerAccount命令在托管c#应用程序中不起作用

登录AzurerAccount命令在托管c#应用程序中不起作用,c#,powershell,azure,iis,C#,Powershell,Azure,Iis,我正在使用powershell脚本登录azure,为此,我编写了简单的命令“login AzureRmAccount”,并在单击按钮时将该脚本调用到c#代码中。它在本地运行良好,但当我在服务器上托管此页面时,身份验证弹出窗口未打开,我收到错误消息,即。“当应用程序未在UserInteractive模式下运行时,显示模式对话框或窗体是无效的操作。指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知“由于您的代码正在服务器上运行,弹出窗口将

我正在使用powershell脚本登录azure,为此,我编写了简单的命令“login AzureRmAccount”,并在单击按钮时将该脚本调用到c#代码中。它在本地运行良好,但当我在服务器上托管此页面时,身份验证弹出窗口未打开,我收到错误消息,即。“当应用程序未在UserInteractive模式下运行时,显示模式对话框或窗体是无效的操作。指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知“

由于您的代码正在服务器上运行,弹出窗口将尝试在本地系统(服务器)上生成,这显然是不可能的,因为您未登录到它

正确的方法是根据此答案末尾的代码使用凭据对象。您需要创建自己的机制(表单)来捕获用户名和密码

遗憾的是,在发布时,Microsoft ID不支持非交互式流(您正在尝试执行的操作)。您需要在客户端计算机上运行脚本,登录到服务器,或使用适当的凭据设置Azure AD帐户

使用凭据对象登录Azure:

#Set up a PSCredential:
$yourPassword = ConvertTo-SecureString "<Your Password>" -AsPlainText –Force
$yourCredential = 
    New-Object -TypeName pscredential –ArgumentList "<Your UserName>", $yourPassword

# Then use that credential to log in to your Azure account 
Login-AzureRmAccount -Credential $yourCredential 
      -ServicePrincipal –TenantId <Your TenantId>
#设置PSCredential:
$yourPassword=converttoSecureString”“-AsPlainText–Force
$yourCredential=
新对象-TypeName pscredential–ArgumentList”“$yourPassword
#然后使用该凭据登录到您的Azure帐户
登录AzurerAccount-凭证$yourCredential
-服务负责人-租户

是,但使用此方法,我无法使用帐户类型“microsoft帐户”登录。我将只能登录到帐户类型“microsoft Azure Active Directory”。请检查此链接。很遗憾,microsoft ID不支持非交互式流(您正在尝试执行的操作)。您需要在客户端计算机上运行脚本,登录到服务器,或使用适当的凭据设置Azure AD帐户。我知道我太迟了,但感谢您的回答,我能够解决此问题。只需再问一个简单的问题。我使用此方法时没有编写“-ServicePrincipal–TenantId”“而且它工作得很好。我是否做错了什么,因为即使在powershell的帮助命令中,我也发现您必须指定tennatid。不,它们不是严格必需的。如果不提供它们,则将使用默认值。