Создайте правильный системный путь из скрипта Poweshell, который читается как system.io.file.readalltext () - PullRequest
0 голосов
/ 26 сентября 2018

Я создаю веб-сайт asp, который будет запускать сценарии PowerShell и отображать результаты на веб-странице.

Моя проблема в том, что у меня есть один сценарий, который возвращает полный путь к файлу журнала.Этот возвращенный путь я передаю в System.IO.File.ReadAllText ().Но я получаю исключение Invalid символов во время выполнения.

Пример:

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 голосов
/ 26 сентября 2018

Ваш собственный ответ работает, но вы можете сделать ненужным вызов .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 для вывода строк, и если выиспользуйте его, он добавляет дополнительную новую строку (CRLF в Windows) к выводу.
То есть строка ввода из одной строки превратится в строку вывода из двух строк (строка ввода с завершающей строкой).

0 голосов
/ 26 сентября 2018

Решил проблему, добавив .TrimEnd('\r', '\n')

String resultPath = builder.ToString().TrimEnd('\r', '\n');
diskCeanUpResult.Text = System.IO.File.ReadAllText(resultPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...