В настоящее время для этого открыта ошибка. Проблема на самом деле в том, что Write-Error
работает в пустом методе.
По замыслу, вы должны использовать Throw
для создания ошибки внутри класса.
Вот измененный версия вашего скрипта
Class MyClass {
[void]MethodWithoutReturnValue([string]$Msg) {
Throw "MyClass.MethodWithoutReturnValue(): $Msg"
}
[bool]MethodWithReturnValue([string]$Msg) {
Throw "MyClass.MethodWithReturnValue(): $Msg"
$this.MethodWithoutReturnValue("this won't work either")
return $true
}
}
[MyClass]$obj = [MyClass]::new()
$obj.MethodWithoutReturnValue('this error will show up')
[bool]$Result = $obj.MethodWithReturnValue('this error will NOT show up')
Дополнительные примечания
Использование Throw
остановит ваш скрипт, поэтому скрипт не будет продолжаться дальше. Чтобы предотвратить это, используйте оператор Try{}Catch{}
.
[MyClass]$obj = [MyClass]::new()
Try {
$obj.MethodWithoutReturnValue('this error will show up')
}
Catch {
Write-Error $_
}
[bool]$Result = $obj.MethodWithReturnValue('this error will NOT show up')
# I love Cyan
Write-Host 'Second error not being in a try catch mean this will not get printed' -ForegroundColor Cyan
Reference
Github -Write-Error не работает в методах класса, которые возвращают непустое значение