2012-05-17 7 views
20

В чем смысл $? в Powershell?Что такое ``? `В Powershell?


Edit: TechNet answers в тавтологии, не объясняя, что 'успех' или 'неудача' означает.

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

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

ответ

23

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

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

Например, рассмотрим вызов 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 здесь, так как предыдущая команда не была успешной.

+0

Что такое команда? –

+0

@MattHickford Команда - это то, что вы выполняете с помощью Powershell. Например, это может быть командлет или исполняемый файл. См. Пример, который я добавил. –

+0

Что означает «успешный»? Как вы думаете, это означает «если и только если $ LastExitCode равен 0»? –

3

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

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

Что теперь делают люди? – mikemaccana

+1

@mikemaccana, в той же лодке здесь .... Я бы подумал, попробуй/поймать заявления. – Johnrad

Смежные вопросы