2010-10-20 13 views
14

Xin chào, tôi rất mới với Powershell nhưng tôi có một câu hỏi cười khúc khích. Tôi muốn có thể biết liệu một lệnh đã hoàn thành thành công sao cho tôi có thể cung cấp các thông điệp có ý nghĩa để lưu trữ.Xác định xem lệnh Powershell có thành công hay không

Tôi đang sử dụng lệnh appcmd để thêm ràng buộc trong IIS. Về cơ bản mà đi như sau:

./appcmd set site /site.name:........................

Nhưng làm thế nào tôi có thể làm một kiểm tra để đảm bảo nó là thành công hay không?

Tôi nghĩ rằng nếu tôi chỉ cần đặt Write-Host "Successfully added binding" sau tuyên bố đó, nó sẽ kích hoạt sau khi bất kể nếu appcmd thành công.

Tôi đoán tôi cần phải làm một cái gì đó như:

$successful = ./appcmd set site /site.name:........................

nhưng sau đó $successful có vẻ là một chuỗi chứa kết quả msg?

Nỗ lực giúp đỡ về điều này! Chúc mừng

Trả lời

17

Giả sử appcmd là một bảng điều khiển exe, ngay cả khi lỗi đó, dòng tiếp theo trong tập lệnh sẽ thực thi.

Nếu bạn muốn kiểm tra nếu EXE bị lỗi và EXE sử dụng mã thoát tiêu chuẩn 0 để cho biết thành công, thì chỉ cần kiểm tra biến đặc biệt $? ngay sau khi gọi EXE. Nếu nó là $ true thì EXE trả về mã thoát 0.

Nếu EXE không chuẩn về mã thoát, nó sẽ trả về thành công (có thể có nhiều mã thành công), sau đó kiểm tra $LastExitCode để lấy mã thoát chính xác mà EXE cuối cùng trả về.

+0

cảm ơn câu trả lời. Vì vậy, tôi giả định rằng '$?' Và '$ LastExitCode' là tương đối? Giả sử tôi thực hiện lệnh này (hoặc một) cmd khác trong suốt kịch bản - các vars đó liên quan đến lệnh cuối cùng đã được thực thi? – baron

+1

Chính xác. '$?' áp dụng cho tất cả các lệnh thực hiện. Nó cho biết thành công của lệnh trước đó. Lưu ý rằng các lỗi không kết thúc (Get-ChildItem idontexist) vẫn dẫn đến một '$?' Trả về true. Nếu một lệnh ném một lỗi kết thúc thì '$?' Trả về $ false. Nếu cần thiết, bạn có thể bắt buộc lệnh chuyển đổi lỗi không kết thúc thành lỗi kết thúc bằng cách sử dụng tham số phổ biến '-ErrorAction Stop'. '$ LastExitCode' giữ mã thoát cho EXE được thực hiện gần đây nhất. –