Làm cách nào để SCCM nhận ra mã trả về từ khi hoàn thành tập lệnh Powershell?


9

Tôi đang sử dụng triển khai ứng dụng SCCM 2012 để cài đặt phần mềm. Loại cài đặt cụ thể là trình cài đặt theo kịch bản vì SCCM liên tục không có lỗi xác thực exe. Kịch bản là powershell và cài đặt thành công phần mềm ngay cả khi được SCCM thực thi.

Vấn đề là SCCM chỉ thấy trả về 0 từ khi hoàn thành từ tập lệnh. Tôi đã thử write-host, return, write-output, và chỉ cần một mục phù hợp với mã cho một khởi động lại mềm. Không ai trong số họ dường như được đọc bởi SCCM khi nhật ký thực thi ứng dụng thu về 0.

Làm thế nào để bạn xuất mã trả về từ powershell để SCCM có thể diễn giải chúng?


Bạn đã thử một cái gì đó như exit 1ở cuối tập lệnh PowerShell chưa?
jscott

Trong trường hợp exitnày là một cmdnội dung. Trong các hệ thống triển khai khác, tôi thấy các tệp .ps1 chạy với starthoặc cmd /c powershell.exe somefile.ps1. Xin lỗi vì spitballing mà không truy cập vào bài kiểm tra SCCM.
jscott

Câu trả lời:


9

Có một vấn đề đã biết với mã thoát powershell (xem phần cuối của câu trả lời này) có thể biểu hiện khi sử dụng tập lệnh cài đặt powershell với SCCM. Để giải quyết vấn đề, tôi thực hiện hai biện pháp:

  1. Tôi luôn có SCCM gọi một tệp bó chạy tập lệnh powershell bằng cách gọi powershell.exemột cách rõ ràng.
  2. Tôi đảm bảo rằng mọi đường dẫn mã trong tập lệnh cài đặt kết thúc bằng một cuộc gọi rõ ràng đến [System.Environment]::Exit().

Với hai biện pháp này, tôi không gặp vấn đề gì liên quan đến mã thoát. Đó là một chiến thắng lớn vì việc khắc phục các mã thoát của các tập lệnh cài đặt là một quá trình chậm vì bạn phải đợi máy khách SCCM gọi tập lệnh của bạn cho mỗi lần lặp xử lý sự cố.

Đây là tập tin bó và tập lệnh powershell trông như thế nào:

Install-Application.bat

powershell.exe .\Install-Application.ps1
exit /b %errorlevel%

Install-Application.ps1

try 
{
    # do a bunch of installation stuff
    if ( $rebootNeeded )
    {
        [System.Environment]::Exit(3010)
    }

    [System.Environment]::Exit(0)
}
catch
{
    [System.Environment]::Exit(1)
}

Tại sao các mã thoát không đáng tin cậy khi SCCM gọi các tập lệnh powershell trực tiếp?

Đây là cách chúng tôi biết mã thoát là không đáng tin cậy:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.