2013-05-08 45 views
26

Tôi đang cố gắng chạy tập lệnh PowerShell bên trong dòng lệnh cmd. Có người cho tôi một ví dụ và nó hoạt động:Cách chạy PowerShell trong CMD

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'" 

Nhưng vấn đề là kịch bản PowerShell tôi có thông số đầu vào vì vậy tôi đã cố gắng nhưng không hoạt động:

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' " 

Lỗi này là:

Thuật ngữ 'D: \ Work \ SQLExecutor.ps1 -gettedServerName "MY-PC"' không được nhận dạng là tên của lệnh ghép ngắn, chức năng,

Đang chờ trợ giúp! Cảm ơn!

+2

Bạn có chắc chắn muốn sử dụng -noexit không? Điều này có nghĩa là khi kịch bản của bạn hoàn thành trình bao sẽ treo xung quanh, có thể ngăn chặn việc thực hiện các tập tin thực thi trong CMD. – x0n

Trả lời

51

Bạn cần phải tách biệt các đối số từ đường dẫn tập tin:

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 ' -gettedServerName 'MY-PC'" 

Một tùy chọn khác có thể giảm bớt cú pháp sử dụng tham số tập tin và các thông số vị trí:

powershell.exe -noexit -file "D:\Work\SQLExecutor.ps1" "MY-PC" 
+0

Cảm ơn bạn rất nhiều! – XiaoYao

4

thử chỉ:

powershell.exe -noexit D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" 
0

Tôi muốn thêm phần sau đây vào câu trả lời đúng của Shay Levy: Bạn có thể làm cho cuộc sống của bạn dễ dàng hơn nếu bạn tạo một chút kịch bản hàng loạt run.cmd để khởi động kịch bản PowerShell của bạn:

@echo off & setlocal 
set batchPath=%~dp0 
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" "MY-PC" 

Đặt nó trong đường dẫn giống như SQLExecutor.ps1 và từ bây giờ bạn có thể chạy nó bằng cách đơn giản nhấn đôi vào run.cmd . Nếu bạn yêu cầu đối số dòng lệnh, chỉ cần chuyển chúng thành %1 ... %9 tới tập lệnh PowerShell (bên trong lô run.cmd).

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