Tôi đang cố gắng chuyển các tham số từ một tập tin batch sang tập lệnh PowerShell để kiểm tra xem các dịch vụ Windows có đang chạy hay không.Chuyển tham số tới PowerShell từ tập tin bat
Đây là lệnh hoạt động đầy đủ của tôi:
.\nsrservices.ps1 -cmd running nsrexecd,stisvc
Nhưng vấn đề là hành vi của lệnh:
- Trong một cửa sổ PowerShell, tên dịch vụ được xem là hai (hoặc nhiều hơn) , do đó kiểm tra 'nsrexecd' sau đó kiểm tra 'stisvc'
- Trong tệp lô, tên dịch vụ được chuyển đến PowerShell dưới dạng giá trị duy nhất, do đó kiểm tra 'nsrexecd, stisvc'
Dưới đây là file bat của tôi:
powershell.exe -File .\nsrservices.ps1 -cmd running nsrexecd,stisvc
ECHO.%ERRORLEVEL%
exit /B %ERRORLEVEL%
Trong file PS của tôi, các thông số được định nghĩa như thế:
param([string]$cmd=$(throw "Type d'action manquante !"),[string[]]$srv)
Trong một tập tin nhật ký, tôi đã có hai kết quả này (xin lỗi vì sản lượng của Pháp).
Từ cửa sổ PowerShell:
24/12/2015 09:02:50-Paramètres appelés : cmd=running srv=stisvc nsrexecd
24/12/2015 09:02:50-Début test de l'état running du service : stisvc
24/12/2015 09:02:50- Début évaluation de l'état du service : stisvc
24/12/2015 09:02:50- Fin évaluation de l'état du service : stisvc
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : stisvc
24/12/2015 09:02:50-Début test de l'état running du service : nsrexecd
24/12/2015 09:02:50- Début évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50- Fin évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : nsrexecd
Có nghĩa là các dịch vụ được kiểm tra tuần tự
Từ file .bat:
24/12/2015 09:04:24-Paramètres appelés : cmd=running srv=nsrexecd,stisvc
24/12/2015 09:04:24-Début test de l'état running du service : nsrexecd,stisvc
24/12/2015 09:04:24- Début évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24- Le service nsrexecd,stisvc n'existe pas !
24/12/2015 09:04:24- Fin évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24-Fin test de l'état running du service : nsrexecd,stisvc
Có nghĩa là các dịch vụ có tên 'nsrexecd, stisvc ' không tồn tại.
Dấu phẩy giữa hai tên tôi dường như để gây nhầm lẫn khi sử dụng một tập tin .bat
Vì vậy, tôi kéo sợi lông cuối cùng của tôi để tìm một cách giải quyết để giành chiến thắng chống lại tập tin .bat đẫm máu này.
Tôi đã thử trích dẫn, trích dẫn một lần, -File, -Command, nhưng không thành công.
Bất kỳ đầu mối hoặc giải pháp nào sẽ được đánh giá cao vì nghiên cứu của tôi trên diễn đàn này đã không cho tôi điều gì đó có thể sử dụng được.
Và tất nhiên, sau đó tôi muốn gọi tệp .bat với thông số.
Một điều bạn có thể làm là không sử dụng dấu phẩy trong cuộc gọi theo lô và thay đổi thông số của bạn cho $ srv thành 'ValueFromRemainingArguments = $ true'. Bạn có thể xem thêm tại đây https://technet.microsoft.com/en-us/library/hh847743.aspx. Hoặc chỉ cần đưa nó vào như một chuỗi đơn và sử dụng '-split '," ' – Matt
Tại sao gọi một tập lệnh PowerShell từ một tập tin thực thi? Chỉ cần chạy nó trực tiếp từ PowerShell. –
@Bill_Stewart: Câu hỏi của tôi là về việc bao gồm PowerShell trong tệp .bat vì tôi phải làm như vậy. Tập lệnh này được khởi chạy từ một chương trình đang chạy không chấp nhận những thứ khác ngoài các tệp .bat và .cmd ... –