Подтвердить что ты не робот

Что такое ``? `В Powershell?

В чем смысл $? в Powershell?


Изменить: TechNet отвечает в тавтологии, не объясняя, что означает "преуспевать" или "терпеть неудачу".

$?
Содержит статус выполнения последней операции. Он содержит TRUE, если последняя операция выполнена успешно, и FALSE, если она не удалась.

Я предположил $? просто проверит, имеет ли $LastExitCode значение 0, но я нашел пример counter, где $? False, но $LastExitCode имеет значение True.

4b9b3361

Ответ 1

Он возвращает true, если последняя команда была успешной, иначе false.

Однако существует ряд предостережений и неочевидного поведения (например, что именно подразумевается под "успехом" ). Я настоятельно рекомендую читать эту статью для более полного лечения.

Например, рассмотрим вызов Get-ChildItem.

PS> Get-ChildItem 

PS> $? 
    True

$? вернет true, когда вызов Get-ChildItem будет выполнен успешно.

Однако, если вы вызываете Get-ChildItem в каталоге, который не существует, он вернет ошибку.

PS> Get-ChildItem \Some\Directory\Which\Does\Not\Exist
    Get-ChildItem : Cannot find path 'C:\Some\Directory\Which\Does\Not\Exist' because it does not exist.

PS> $?
    False

$? вернет false здесь, поскольку предыдущая команда не была успешной.

Ответ 2

$? будет содержать $false, если последняя команда привела к ошибке. Он будет содержать $true, если это не так. В PowerShell v1 дня это был обычный способ обработки ошибок. Например, в script, если вы хотите проверить наличие файла и затем распечатать специальное сообщение, если оно этого не произошло, вы можете сделать:

Get-Item -Path john -ErrorAction silentlycontinue;
if( -not $?)
{
    'could not find file.';
     exit
 }`