12

Khi thực thi tập lệnh Powershell (trong 2.0) bằng cách sử dụng công tắc dòng lệnh -File và xác định rõ ràng tham số đầu vào trong Param, mã thoát luôn là "0" (không bao giờ thất bại) thay vì trả lại đúng mã lỗi được xác định hoặc dự kiến.
Điều này không xảy ra khi sử dụng các định nghĩa tham số rõ ràng và công tắc -Command, tuy nhiên đối với các mục đích không liên quan, tôi cần giữ nút chuyển -File trong tập lệnh của mình.Powershell không trả lại mã thoát thích hợp

Bất kỳ hỗ trợ nào với cách khắc phục (không liên quan đến việc xóa các định nghĩa thông số rõ ràng) sẽ cực kỳ hữu ích.

Powershell "không trả về mã thoát đúng":

exit1.ps1: Tập lệnh gọi xác định rõ ràng các tham số. Errorlevel luôn là 0, ngay cả khi có một số phần của tập lệnh thất bại không thành công.

param(
    [Parameter(mandatory=$true)][string]$arg1, 
    [Parameter(mandatory=$true)][string]$arg2, 
    [Parameter(mandatory=$true)][string]$arg3 
); 
exit 1; 

Output:

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three" 

C:\temp\testnant>echo %errorlevel% 
0 




Bây giờ, cho phép thử cùng một điều khi sửa đổi chức năng param được ít rõ ràng:

Exit1LooseParam.ps1:

param(
    $arg1, 
    $arg2, 
    $arg3 
); 
exit 1; 

Output (với ba thông số):

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three" 

C:\temp\testnant>echo %errorlevel% 
1 




Dường như khi bạn xác định một cách rõ ràng các thông số đầu vào, Powershell dường như "mất trí freakin của nó" vì một lý do và không quay trở lại mã thoát thích hợp.

Có ai có giải pháp hoặc có thể giải thích tại sao điều này xảy ra không?

Trả lời

14

Rất tiếc, tôi mong đợi exit 1 hoạt động trong cả hai trường hợp. Ít nhất bạn có thể sử dụng điều này cho cả hai:

[Environment]::Exit(1)

+0

Điều đó dường như trả về mã thoát đúng cách. Cảm ơn! – JonnyG

+0

Cảm ơn điều này, chỉ cần sắp xếp ra một vấn đề cho tôi quá :) –

+0

mà không có điều này tôi chỉ có thể nhận được lối ra để trở về 0 hoặc 1 – cmcginty

Các vấn đề liên quan