如何在C#windows应用程序中使用azure命令调用PowerShell脚本

时间:2018-02-12 17:50:03

标签: c# powershell azure powershell-v4.0

下面是我的事件,如果我通过,简单的PowerShell脚本运行正常,但如果我传递脚本包含任何Azure命令,则输出为空。 (那个azure命令脚本从powershell命令提示符运行正常)

private void RunScript_Click(object sender, EventArgs e)
{
        string result = "";

        PSDataCollection<PSObject> myOutPut = new PSDataCollection<PSObject>();

        try
        {
            InitialSessionState initial = InitialSessionState.CreateDefault();
            initial.ImportPSModule(new string[] {
                        @"C:\Program Files\WindowsPowerShell\Modules\AzureRM\5.2.0\AzureRM.psd1",
                });

            using (Runspace objRunSpace = RunspaceFactory.CreateRunspace(initial))
            {
                objRunSpace.Open();

                using (PowerShell objPowerShell = PowerShell.Create())
                {

                    objPowerShell.Runspace = objRunSpace;

                    string Script = textBoxURL.Text;                        

                    objPowerShell.AddScript(Script);

                    objPowerShell.AddCommand("Out-String");

                    IAsyncResult IvokeResult = objPowerShell.BeginInvoke<PSObject, PSObject>(null, myOutPut);

                    while (IvokeResult.IsCompleted == false)
                    {
                        System.Threading.Thread.Sleep(100);
                    }

                    foreach (PSObject outitem in myOutPut)
                    {
                        result += outitem.ToString();
                    }
                }
            }

            textBoxOutPut.Text = result;
        }
        catch (Exception ex)
        {
        }
    }

2 个答案:

答案 0 :(得分:1)

根据我的测试,您提到的代码没有问题。如果输入错误的命令,我可以得到空输出。所以请确保你的命令是正确的。

另一个重要的事情就是确保它输出的命令。我测试了azure命令Add-AzureRmAccount

enter image description here

答案 1 :(得分:0)

您在哪里连接到Azure?

您加载了该模块,但没有建立与Azure的连接以使用该cmdlet。

在您的原生PoSH实例/会话中,您可以使用它:

# Set creds
$AdminCreds = Get-Credential -Credential 'admin@domain.com'

# Connect to Azure AD
Connect-AzureAD -Credential $Admincreds


Account                          Environment TenantId   TenantDomain            AccountType
-------                          ----------- --------   ------------            -----------
admin@contoso.onmicrosoft.com    AzureCloud  11...      contoso.onmicrosoft.com User     

如果没有,你最终会得到这样的错误......

Get-AzureADApplication
Get-AzureADApplication : You must call the Connect-AzureAD cmdlet before calling any other cmdlets.
At line:1 char:1
+ Get-AzureADApplication
+ ~~~~~~~~~~~~~~~~~~~~~~