1

我想使用 C# 获取带有 powershell 的服务器的每个驱动器的空白空间

这是运行良好的powershell脚本

Get-PSDrive |Format-Table

我想要的是输出这个脚本并在 UI 上显示

我到目前为止所尝试的。

      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 窗体应用程序上。我无法弄清楚如何转换此 PS 对象并将其转换为可读格式。

请把我重定向到正确的方向。

4

1 回答 1

1

您遇到的问题是您正在从脚本中获取格式化的数据:

"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();
            }
于 2018-10-10T10:44:56.533 回答