2009-05-14 30 views
9

Tôi muốn máy chủ Windows 2003 kích hoạt tập lệnh để kích hoạt tập lệnh khác trong máy tính Windows Server 2008 riêng biệt.Làm cách nào để thực thi từ xa một tập lệnh trong Windows?

Tôi đã được thông báo rằng Powershell có thể làm điều đó, và điều đó tốt, nhưng tôi cần thêm chi tiết cụ thể.

Có ai có mẹo nào về điều này không?

Cảm ơn!

+0

Câu hỏi này có lẽ phù hợp hơn cho serverfault.com. Tôi đã đánh dấu để đóng vì lý do này; stackoverflow giờ đây hỗ trợ các câu hỏi chuyển động giữa các trang web. –

Trả lời

14

psexec từ SysInternals

+0

Điều này có vẻ như là câu trả lời hay nhất. Tôi sẽ thử nó vào ngày mai. –

0

Các giải pháp chấp nhận từ http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Q_22959948.html là:

Những gì tôi cung cấp là một kịch bản mà sẽ đưa thông số ... Trong trường hợp này phải mất 4. 1) Server: nếu bạn vượt qua -server nó sẽ chỉ thực hiện một máy chủ 2) Danh sách: Bạn có thể cung cấp một tệp danh sách máy chủ. 3) Dịch vụ: Tên của dịch vụ bạn muốn sửa đổi 4) Verbose: không phải là được sử dụng tại đây.

Tôi đã có một số sai lầm mà tôi thay đổi trong mã sau. Để sử dụng cắt/dán mã vào một tệp có tên Set-RemoteService.ps1. Đảm bảo đặt chính sách thực thi của bạn để chạy tập lệnh ... nó sẽ không theo mặc định. Bạn thực hiện điều đó bằng cách sử dụng lệnh ghép ngắn set-executionpolicy . PS> Set-ExecutionPolicy "RemoteSigned" để chạy kịch bản bạn làm PS> C: \ PathToScript \ Set-RemoteService.ps1 -list c: \ ServerList.txt -service "DHCP"

#### ############# Param ($ server, $ list, $ service, [switch] $ verbose)

if ($ Verbose) {$ VerbosePreference = "Tiếp tục"} nếu ($ list) { foreach ($ srv in (danh sách get-content $)) { $ query = "Chọn * từ Win32_Service nơi Tên = '$ dịch vụ'" $ myService = get- WmiObject -query $ query -computer $ srv $ myService.ChangeStartMode ("Tự động") $ myService.Start() }} if ($ server) { $ query = "Chọn * từ Win32_Service nơi Tên = '$ dịch vụ'" $ myService = get-WmiObject -query $ truy vấn-máy tính $ server $ myService.ChangeStartMode ("Tự động") $ myService.Start()}

+0

Tập lệnh này bắt đầu Dịch vụ hiện có trên máy tính từ xa nhưng không chạy các tập lệnh tùy ý. –

6

Nhìn vào cú pháp cho lệnh AT. Bạn có thể sử dụng nó để lên lịch trình chạy trên máy từ xa.

Lệnh AT lên lịch các lệnh và chương trình chạy trên máy tính tại thời gian và ngày được chỉ định. Dịch vụ Lịch biểu phải chạy để sử dụng lệnh AT.

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]] 
AT [\\computername] time [/INTERACTIVE] 
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command" 

\\computername  Specifies a remote computer. Commands are scheduled on the 
        local computer if this parameter is omitted. 
id     Is an identification number assigned to a scheduled 
        command. 
/delete   Cancels a scheduled command. If id is omitted, all the 
        scheduled commands on the computer are canceled. 
/yes    Used with cancel all jobs command when no further 
        confirmation is desired. 
time    Specifies the time when command is to run. 
/interactive  Allows the job to interact with the desktop of the user 
        who is logged on at the time the job runs. 
/every:date[,...] Runs the command on each specified day(s) of the week or 
        month. If date is omitted, the current day of the month 
        is assumed. 
/next:date[,...] Runs the specified command on the next occurrence of the 
        day (for example, next Thursday). If date is omitted, the 
        current day of the month is assumed. 
"command"   Is the Windows NT command, or batch program to be run. 
1

Nói về PsExec, tôi sẽ mạnh đề nghị sử dụng Cygwin/OpenSSH để thay thế.

SSH có nhiều lợi thế (trên các công cụ như PsExec hoặc thậm chí cả dịch vụ tùy chỉnh).
Ví dụ, hãy thử sử dụng với PsExec và thực hiện những gì các bash/ssh dòng lệnh làm:

ssh [email protected] "find . -name something" 2> all.errors.txt 
ssh [email protected] "grep -r something ." 
if [ "$?" == "0" ] 
then 
    echo "FOUND" 
else 
    echo "NOT FOUND" 
fi 

Good Luck!

  • chuyển SSH (!) Tình trạng xa stdout/stderr/exit để địa phương vỏ để kiểm tra
    (tính năng sát thủ và yêu cầu chung để tích hợp thực hiện từ xa vào logic của kịch bản tại địa phương)

  • Cygwin/OpenSSH cung cấp tiêu chuẩn Môi trường vỏ POSIX
    (đầu tư thời gian hiệu quả, công cụ cơ bản, nền tảng sẵn sàng, thói quen tương thích, v.v.)

  • Bạn vẫn có thể/luôn luôn chạy tất cả nguồn gốc ứng dụng Windows
    (bao gồm cả thực hiện tự động *.bat file theo cmd xử lý)

  • Bạn có thể cấu hình bằng mật khẩu ít auth sử dụng khóa công khai
    (suy nghĩ về giám sát tự động nhiệm vụ)


Mẹo

Có một yêu cầu tôi đã có vấn đề với ban đầu:
nền sshd dịch vụ phải thực hiện các ứng dụng trong phiên đồ họa của người dùng
(để làm cho cửa sổ ứng dụng xuất hiện trong môi trường máy tính để bàn).

Các acceptable solution đối với tôi là chạy sshd dịch vụ trực tiếp trong phiên GUI của người dùng
(bắt đầu tự động khi người dùng đăng nhập, hãy làm theo các liên kết để xem những thay đổi tập tin cấu hình):

/usr/sbin/sshd -f /home/user/sshd_config 
+0

Tôi thực sự đang sử dụng SSH, fwiw. Vấn đề là SSH không thể bắt đầu một chương trình gui (mặc dù cho biết chương trình gui không có gui ...) –

+0

@Frew, [link] (http://spectlog.com/content/Run_cygwin_sshd_in_user_seesion_to_start_GUI_application) từ các mẹo cụ thể địa chỉ chạy các ứng dụng GUI từ xa trên Windows.Và theo ý kiến ​​của tôi, không có giải pháp đơn giản và hài hòa hơn cho vấn đề này (ít nhất là trong bối cảnh tôi phải đối phó với nó). Nếu máy chủ Windows trong câu hỏi tồn tại đối với vai trò máy chủ thuần túy, bạn vẫn có thể cần tự động đăng nhập người dùng này sau mỗi lần khởi động lại (để phiên máy tính để bàn và 'sshd' vẫn hoạt động liên tục). – uvsmtid

+0

Tôi có thể nhìn vào nó một lần nữa, nhưng tôi đã có vấn đề khá lớn với dự án này là cho (thử nghiệm tự động của một trình cài đặt NSIS) đến mức mà tôi đã phải từ bỏ hoàn toàn. –

3

Cách đơn giản nhất đó là sử dụng sẽ theo hai bước

a. cài đặt cygwin vào máy tính từ xa

b. chạy ssh hudson @ mcs '/cygdrive/c/path_to_script.bat'

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