0

我正在尝试使用 C# 代码参考 System.Management.Automation 从 Azure Active Directory 获取一些数据。我的代码执行没有错误,只有空结果并且没有输出到文本文件。以前有没有人遇到过这个问题,或者我错过了什么?谢谢!

public void RunScriptTest()
        {
            string username = "Username";
            string password = "Password";
            List<String> listResults = new List<String>();
            PowerShell powershell = PowerShell.Create();
            Runspace runspace = RunspaceFactory.CreateRunspace();
            runspace.Open();
            powershell.Runspace = runspace;
            powershell.AddScript("Install-Module -Name AzureAD -Force; \n");
            powershell.AddScript("Import-Module -Name AzureAD -Verbose \n");
            powershell.AddScript("$username = \"" + username + "\"; \n" +
                "$password = convertTo-securestring '" + password + "' -AsPlainText -Force; \n" +
                "$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password; \n" +
                "Connect-AzureAD - Credential $cred; \n");
            powershell.AddScript("Get-AzureADUser | Out-File -FilePath " + @"C:\TestResults\1.txt");
            Collection<PSObject> results = powershell.Invoke();
            runspace.Close();

            StringBuilder stringBuilder = new StringBuilder();
            foreach(PSObject obj in results)
            {
                listresults.Add(obj.ToString());

            }

        } 
4

1 回答 1

0
  • .AddScript()在不干预呼叫的情况下对呼叫进行排序.AddStatement()仅使最后一个 .AddScript()呼叫有效-所有先前的呼叫都将被忽略。

  • 为了检查通过 执行期间可能发生的错误.Invoke(),您必须访问powershell.Streams.Error流。

因此,直接的解决方法是将您的powershell.AddScript(...)电话替换为$powershell.AddStatement().AddScript(...)

请注意,您的 PowerShellCode 似乎旨在不产生任何输出,因此尝试填充listresults.

于 2019-12-12T02:13:34.240 回答