我有以下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会提示弹出窗口,以便它不会自动发生。
有什么建议吗?
答案 0 :(得分:2)
从命令行执行时,将继承先前的身份验证。您可能已经通过现在要避免的弹出窗口进行了身份验证。使用Web应用程序或新进程,从PowerShell角度开始,从一个从未对Azure环境进行身份验证的进程开始。
要以无人值守的方式进行身份验证,您可能需要遵循https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/文档中描述的内容。请注意,本文档基于Azure模块V1 +。
不过,这个想法是一样的。 请注意,如果您从1个帐户以无人参与的方式连接,PowerShell脚本将回答1.但我想您希望该脚本执行其他操作。