Как предотвратить PowerShell 7 Write-Error, чтобы буквально записать текст «Write-Error»? - PullRequest
0 голосов
/ 05 мая 2020

Я запускаю следующий скрипт в PowerShell 7:

Write-Error "Demo error message" 

Он пишет (надеюсь, в stderr):

Write-Error: сообщение об ошибке демонстрации

Вопрос

Как предотвратить начальный литерал «Write-Error:»? Я хотел бы получить только

Сообщение об ошибке демо

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Взгляните на это после запуска Write-Error:

(Get-Error).ErrorRecord.CategoryInfo

Category   : NotSpecified
Activity   : Write-Error
Reason     : WriteErrorException

Кажется, что сообщение, которое вы представляете в консоли, состоит из CategoryInfo.Activity и Exception.Message, соединенных со строкой ":" .

Вы можете изменить то, что Write-Error помещает в CategoryInfo.Activity, когда он генерирует ErrorRecord:

Write-Error "Demo error message" -CategoryActivity 'xxx'
xxx: Demo error message

Если вы поместите $ null или пустую строку, она вернется к тексту «Write-Error» , и когда вы используете пустое пространство, строка начинается с ":", так что это неудовлетворительно:

Write-Error "Demo error message" -CategoryActivity " "
 : Demo error message

Но что, если мы поместим в сообщение два пробела? Он избавляется от этих трех символов.

Write-Error "`b`b`bDemo error message" -CategoryActivity " "
Demo error message

Даже это работает, но, честно говоря, я не знаю почему:

Write-Error "Demo error message" -CategoryActivity "`b`b"
Demo error message

Вы также можете поместить достаточно пробелов, чтобы удалить всю строку «Write-Error:»:

Write-Error ("`b"*13 + 'Demo error message')
Demo error message

Когда вы обнаруживаете ошибку и делаете что-то с сообщением где-то в строке, эти пробелы сохраняются:

try {Write-Error ("`b`b`bDemo error message") -ErrorAction Stop} catch {'The error is: ' + $_.Exception.Message}
The error iDemo error message

Работает, как требуется, определенно не рекомендуется;).

1 голос
/ 05 мая 2020

Если вам подходит прерывающая ошибка, вы можете использовать

throw "Demo error message"

о Throw

enter image description here

...