从C#运行时,Get-AzureAccount无法找到帐户

时间:2015-12-24 15:11:15

标签: c# powershell azure azure-powershell

我有以下powershell脚本(“azureaccounts.ps1”):

$accountExisted = @(Get-AzureAccount)
Write-Log $accountExisted.Count

当我从Windows Powershell运行它时,它会找到5个Azure帐户 当我从CMD运行它时,它找到5个Azure帐户。 (cmd中的“powershell azureaccounts.ps1”)

但是当我从C#Web应用程序执行脚本时,它找不到任何帐户。

使用PowerShell API:

PowerShell powerShell = PowerShell.Create();
powerShell.AddScript(@"C:\...\azureaccounts.ps1");
var results = powerShell.Invoke();

还有Process对象:

string sPowershellDir = @"C:\...\WindowsPowerShell\v1.0";
string sDeploymentScriptDir = @"C:\...\azureaccounts.ps1";
string sCommand = String.Format(@"powershell.exe -ExecutionPolicy ByPass -File {0}", sDeploymentScriptDir};
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + sCommand);
procStartInfo.UseShellExecute = false;
procStartInfo.WorkingDirectory = sPowershellDir;
Process oProcess = Process.Start(procStartInfo);

一种解决方案是执行Add-AzureAccount,但该cmdlet会提示弹出窗口,以便它不会自动发生。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

从命令行执行时,将继承先前的身份验证。您可能已经通过现在要避免的弹出窗口进行了身份验证。使用Web应用程序或新进程,从PowerShell角度开始,从一个从未对Azure环境进行身份验证的进程开始。

要以无人值守的方式进行身份验证,您可能需要遵循https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/文档中描述的内容。请注意,本文档基于Azure模块V1 +。

不过,这个想法是一样的。 请注意,如果您从1个帐户以无人参与的方式连接,PowerShell脚本将回答1.但我想您希望该脚本执行其他操作。