كيف يمكنني تنفيذ برنامج نصي عن بعد في نظام التشغيل Windows؟
-
21-08-2019 - |
سؤال
أرغب في قيام خادم يعمل بنظام التشغيل Windows 2003 بإطلاق برنامج نصي لتشغيل برنامج نصي آخر في جهاز كمبيوتر منفصل يعمل بنظام Windows Server 2008.
لقد قيل لي أن Powershell يمكنه القيام بذلك، ولا بأس بذلك، ولكنني بحاجة إلى مزيد من التفاصيل المحددة.
هل لدى أي شخص أي نصائح لهذا؟
شكرًا!
المحلول
psexec من Sysinternals
نصائح أخرى
والنظر في بناء جملة الأمر AT. يمكنك استخدامه لجدولة عملية لتشغيلها على جهاز بعيد.
ووAT بجدولة الأوامر والبرامج لتعمل على جهاز كمبيوتر في وقت محدد والتاريخ. يجب تشغيل خدمة الجدول لاستخدام الأمر 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.
وأسهل طريقة التي سوف يكون استخدام في خطوتين
أ. تركيب سيغوين إلى جهاز الكمبيوتر البعيد
ب. تشغيل هدسون سه @ /cygdrive/c/path_to_script.bat "MCS
التحدث عن PsExec
, ، أود بقوة أقترح استخدام Cygwin/OpenSSH بدلاً من ذلك.
يتمتع SSH بمزايا متعددة (مقارنة بأدوات مثل PsExec
أو حتى الخدمات المخصصة).
على سبيل المثال، حاول استخدام مع PsExec
وتنفيذ ما هذه bash
/ ssh
تقوم أسطر الأوامر بما يلي:
ssh user@remotehost "find . -name something" 2> all.errors.txt
ssh user@remotehost "grep -r something ."
if [ "$?" == "0" ]
then
echo "FOUND"
else
echo "NOT FOUND"
fi
حظ سعيد!
ينقل SSH (!) حالة stdout / stderr / الخروج عن بعد إلى محلي قذيفة للتفتيش
(ميزة قاتلة ومطلب شائع لدمج التنفيذ عن بعد في منطق البرامج النصية المحلية)يوفر Cygwin/OpenSSH معيار بيئة قذيفة POSIX
(الاستثمار الفعال للوقت، والأدوات الأساسية، والجاهزية عبر الأنظمة الأساسية، والعادات المتوافقة، وما إلى ذلك)لا يزال بإمكانك/دائما تشغيل كل مواطن تطبيق ويندوز
(بما في ذلك التنفيذ التلقائي لـ*.bat
الملفات بواسطةcmd
المعالج)يمكنك تكوين مصادقة بدون كلمة مرور باستخدام المفاتيح العامة
(فكر في المهام الآلية غير المراقبة)
نصيحة
كان هناك متطلب واحد واجهت مشاكل معه في البداية:
خلفية sshd
كان على الخدمة تنفيذ التطبيقات في الجلسة الرسومية للمستخدم
(لإظهار نافذة التطبيق في بيئة سطح المكتب).
ال حل مقبول بالنسبة لي كان يركض sshd
خدمة مباشرة في جلسة واجهة المستخدم الرسومية للمستخدم
(يبدأ تلقائيًا عندما يقوم المستخدم بتسجيل الدخول، اتبع الرابط لرؤية تغييرات ملف التكوين):
/usr/sbin/sshd -f /home/user/sshd_config
والحل المقبول من http://www.experts-exchange.com /OS/Microsoft_Operating_Systems/Q_22959948.html عبارة:
<اقتباس فقرة>وماذا أقدمها كان السيناريو الذي يأخذ المعلمات ... وفي هذه الحالة فإنه يأخذ 4. 1) الخادم: إذا كنت تمر -Server وسوف ذلك إلا خادم واحد 2) القائمة: أنت يمكن أن توفر ملف قائمة الملقمات. 3) الخدمة: اسم الخدمة التي تريد تعديله 4) مطول: ليس تستخدم هنا.
وقد فعلت بعض الأخطاء التي I تغير في التعليمة البرمجية التالية. ليستخدم قص / لصق الشفرة في ملف يسمى تعيين-RemoteService.ps1. تاكد من وضع executionpolicy لتشغيل مخطوطات ... لا سوف افتراضيا. أنت القيام بذلك عن طريق استخدام ضبط-executionpolicy الأمر cmdlet. PS> تعيين-Executionpolicy "RemoteSigned" ل تشغيل البرنامج النصي تفعل PS> C: \ PathToScript \ تعيين-RemoteService.ps1 -list ج: \ ServerList.txt -SERVICE "DHCP"
######################### بارام (خادم $، قائمة $، خدمة $، [التحول] $ مطول)وإذا ($ مطول) {$ VerbosePreference = "متابعة"} إذا (قائمة $) { foreach ($ SRV في (الحصول على المحتوى قائمة $)) { $ الاستعلام = "حدد * من Win32_Service حيث اسم = '$ خدمة" $ myService = جت-WmiObject -الاستعلام $ الاستعلام -Computer $ SRV $ myService.ChangeStartMode ( "تلقائي") $ myService.Start () }} إذا ($ الخادم) { $ الاستعلام = "حدد * من Win32_Service حيث اسم = '$ خدمة" $ myService = جت-WmiObject -الاستعلام $ الاستعلام -Computer $ الخادم $ myService.ChangeStartMode ( "تلقائي") $ myService.Start ()}
اقتباس فقرة>