PowerShell возвращает каждый диск пустого пространства машины в C # - PullRequest
0 голосов
/ 10 октября 2018

Я хочу получить пустое место на каждом диске сервера с powershell, используя C #

, это сценарий powershell, который отлично работает

Get-PSDrive |Format-Table

, что я хочу, чтобы получить вывод этогосценарий и показать его на пользовательском интерфейсе

То, что я пытался до сих пор.

      string scriptToCheckDBServerMemorySpace = "Get-PSDrive |Format-Table";
      using (PowerShell PowerShellInstance = PowerShell.Create())
      {
                    PowerShellInstance.AddScript(scriptToCheckDBServerMemorySpace);

                    Collection<PSObject> PSObject = PowerShellInstance.Invoke();

                    foreach (PSObject PSOutputItem in PSObject)
                    {
                        if (PSOutputItem != null)
                        {

                            //TxtFirstStepResult.Text = PSOutputItem.BaseObject.ToString() + "\n";
                        }
                    }
                    if (PowerShellInstance.Streams.Error.Count > 0)
                    {
                        TxtFirstStepResult.Text = PowerShellInstance.Streams.Error.ToString() + "\n";
                    }
                    Console.ReadKey();
       }

вопрос в том, как получить вывод этого сценария powershell и показать его в приложении Windows Form.Я не могу понять, как преобразовать этот объект PS и преобразовать его в читаемый формат.

, пожалуйста, перенаправьте меня в правильном направлении.

1 Ответ

0 голосов
/ 10 октября 2018

Проблема, с которой вы столкнулись, заключается в том, что вы возвращаете отформатированные данные из вашего скрипта:

"Get-PSDrive |Format-Table"

Данные не находятся в хорошей таблице, как вы видите в консоли - вам нужно будетраспакуйте его и покажите сами.Лучший вариант - получить необработанные объекты и отформатировать их напрямую.Например, вот несколько основных форматов консоли:

string scriptToCheckDBServerMemorySpace = "Get-PSDrive";
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript(scriptToCheckDBServerMemorySpace);

                Collection<PSObject> PSObject = PowerShellInstance.Invoke();

                foreach (PSObject PSOutputItem in PSObject)
                {
                    if (PSOutputItem != null)
                    {

                        Console.WriteLine($"Drive: {PSOutputItem.Members["Name"].Value}, Provider: {PSOutputItem.Members["Provider"].Value}");
                    }
                }
                if (PowerShellInstance.Streams.Error.Count > 0)
                {
                    //TxtFirstStepResult.Text = PowerShellInstance.Streams.Error.ToString() + "\n";
                }

                Console.ReadKey();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...