我正在创建一个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()进行访问
答案 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)。
也就是说,单行输入字符串将变成两行输出字符串(带有尾随换行符的输入字符串)。