从Poweshell脚本创建一个有效的系统路径,该脚本由system.io.file.readalltext()读取

时间:2018-09-25 23:42:48

标签: c# asp.net powershell

我正在创建一个ASP网站,该网站将运行PowerShell脚本并在网页上提供结果。

我的问题是,现在有一个脚本正在返回日志文件的完整路径。这是我传递给System.IO.File.ReadAllText()的返回路径。但是我在运行时遇到了无效字符异常。

示例:

ABC.PS1

param(
    [String]$computer
)
$Logfile = "C:\Scripts\ABC_$($computer)_$(Get-Date -f "dd-MM-yyy_hh-mm-ss").log"
$Logfile | Out-String

.aspx.cs

using (PowerShell PowerShellInstance = PowerShell.Create())
        {
            PowerShellInstance.AddCommand(@"C:\Scripts\ABC.ps1");
            PowerShellInstance.Commands.AddParameter("computer", ServerNameTB.Text);
            var results = PowerShellInstance.Invoke();
            if (results.Count > 0)
            {
                var builder = new StringBuilder();
                foreach (var psObject in results)
                {
                    builder.Append(psObject.BaseObject.ToString());
                }
                String resultPath = builder.ToString();
                //Exception invalid characters
                diskCeanUpResult.Text = System.IO.File.ReadAllText(resultPath); 
                }
            }

如何转换返回的路径,以便可以通过File.ReadAllText()进行访问

2 个答案:

答案 0 :(得分:0)

通过添加.TrimEnd('\r', '\n')

解决了该问题
String resultPath = builder.ToString().TrimEnd('\r', '\n');
diskCeanUpResult.Text = System.IO.File.ReadAllText(resultPath);

答案 1 :(得分:0)

您自己的答案有效,但是您可以通过调整.TrimEnd()脚本来使*.ps1通话不必要:

param(
    [String]$computer
)
# Output the string directly.
"C:\Scripts\ABC_$($computer)_$(Get-Date -f "dd-MM-yyy_hh-mm-ss").log"

您不需要Out-String来输出字符串,并且如果确实使用它,它将在输出后附加一个额外的换行符(在Windows上为CRLF)。
也就是说,单行输入字符串将变成两行输出字符串(带有尾随换行符的输入字符串)。