Добавить новые строки в переменную, отображаемую через окно сообщений PowerShell - PullRequest
0 голосов
/ 06 сентября 2018

Я сделал простое окно сообщения PowerShell для отображения имен отсутствующих файлов. Я называю их переменной. Когда я повторяю переменную в ISE, она отображает каждую в отдельной строке, однако при отображении в окне сообщения она выглядит как строка, разделенная пробелами. Мне не повезло с заменой пробелов на `n, но, возможно, я сделал это неправильно.

У кого-нибудь есть идеи?

Текущий код:

$missing = Compare-Object $capture.BaseName $output.BaseName | Select-Object -ExpandProperty InputObject
If($missing -ne $null){
Write-Host 'Here are the missing file(s):'
    echo $missing

#send pop up alert
$ButtonType = [System.Windows.MessageBoxButton]::OK
$MessageboxTitle = “Please Process Files”
$Messageboxbody = “
The following are missing:

$missing”
$MessageIcon = [System.Windows.MessageBoxImage]::Warning
[System.Windows.MessageBox]::Show($Messageboxbody,$MessageboxTitle,$ButtonType,$messageicon)
}Else{
}

Вывод в ISE выглядит так:

File1

File2

file3

Вывод в окне сообщения выглядит следующим образом:

Файл1 Файл2 Файл3

1 Ответ

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

$missing - это список строк, поэтому при Echo их консоль заботится о форматировании их в несколько строк.

Достижение того же в MessageBox требует, чтобы вы присоединили строки, используя символы новой строки (ASCII 10).

$([String]::Join(([Convert]::ToChar(10)).ToString(), $missing)

В этой строке используется метод String.Join (система) для объединения имен файлов в одну строку, объединенную символами новой строки. [Convert]::ToChar(10) по существу \n, но использование этого приводит к тому, что эта символьная строка используется вместо символа новой строки. Мы просто преобразовываем код ASCII 10 в символ (а затем в строку) и используем его для объединения имен файлов.

Вот обновленный скрипт:

$missing = Compare-Object $capture.BaseName $output.BaseName | Select-Object -ExpandProperty InputObject

If($missing -ne $null){
    Write-Host 'Here are the missing file(s):'
        Echo $missing

    # Send pop up alert

    $missingWithNewlines = $([String]::Join(([Convert]::ToChar(10)).ToString(), $missing))

    $ButtonType = [System.Windows.MessageBoxButton]::OK

    $MessageboxTitle = “Please Process Files”

    $Messageboxbody = “
The following are missing:

$missingWithNewlines”

    $MessageIcon = [System.Windows.MessageBoxImage]::Warning

    [System.Windows.MessageBox]::Show($Messageboxbody,$MessageboxTitle,$ButtonType,$messageicon)

}Else{

    # Nothing missing

}

Вот результат:

MessageBox

...