Psexec: دليل شامل مع أمثلة من الحياة الواقعية

إذا كان هناك أداة سطر أوامر يمكن أن تنافس robocopy من حيث الفائدة، فإنها تكون PsExec. إن أداة PsExec من Sysinternals هي واحدة من الأدوات الأكثر شيوعًا في ترسانة مسؤول تكنولوجيا المعلومات. تسمح هذه الأداة للمسؤولين بتشغيل الأوامر عن بُعد تمامًا كما لو كانوا على الكمبيوتر المحلي.

لتغطية أداة PsExec بشكل مفصل، كان مناسبًا تغطية هذه الأداة الغنية عن التعريف في دليل ATA النهائي. في هذا الدليل، ستتعلم ما هو برنامج psexec، وما الذي يمكن أن يفعله هذه الأداة المفيدة بالإضافة إلى العديد من الأمثلة حول كيفية استخدامها.

ما هو PsExec.exe؟

إذا كنت جديدًا في مجال تكنولوجيا المعلومات أو ربما لم تكن بحاجة لتشغيل الأوامر والأدوات على أجهزة الكمبيوتر البعيدة، فقد لا تعرف ما هو برنامج psexec.

PsExec أو psexec.exe هي أداة سطر أوامر مبنية لنظام ويندوز. تتيح للمسؤولين تشغيل البرامج على أجهزة الكمبيوتر المحلية والبعيدة بشكل أكثر شيوعًا. إنها أداة مجانية جزء من مجموعة أدوات Sysinternals pstools التي بناها مارك روسينوفيتش منذ سنوات عديدة.

تم بناؤها لتحل محل أدوات مثل telnet التي كانت تجبرك على فتح المنافذ وتعريض النظام لثغرات أمان. في الوقت الحالي، لدينا خيارات أخرى مثل التحكم عن بُعد باستخدام PowerShell وأمر PowerShell Invoke-Command لكن لا يزال لدى PsExec مكانته.

يسمح PsExec بالتفاعل الكامل لتطبيقات واجهة المستخدم للوحة المفاتيح دون الحاجة إلى تثبيت أي برامج. كما سترى في هذا الدليل النهائي، يمكن لـ PsExec تشغيل نوافذ أوامر تفاعلية، وتشغيله كنظام محلي على أجهزة الكمبيوتر البعيدة، وتشغيل أوامر على عدة أجهزة كمبيوتر في وقت واحد وما إلى ذلك.

يدعم جميع إصدارات Windows منذ Windows XP. وهذا يعني أن PsExec على نظام Windows 10 ممكن أيضًا. إنه أداة بسيطة تعمل على كل شيء تقريبًا، لكن لا تخلط بين بساطتها وقدراتها!

متطلبات مسبقة

كل ما تحتاجه هو تشغيل نظام تشغيل Windows حديث على الكمبيوتر المحلي لتشغيل PsExec. ومع ذلك، ستحتاج إلى تشغيل psexec على أجهزة كمبيوتر بعيدة. للقيام بذلك، ستحتاج إلى ضمان وجود بعض العناصر.

إذا لم يكن لديك هذه العناصر في المكان الآن أو إذا كنت غير متأكد، لا تقلق. في القسم التالي، سنغطي كيفية كتابة بعض أوامر PowerShell لاختبار أجهزة الكمبيوتر البعيدة الخاصة بك.

بحسب ما هو موجود حاليًا، فإن PsExec هو الإصدار 2.2 وهو الإصدار الذي ستتعلم عنه في هذه المقالة.

تثبيت PSexec (مع إعداد الكمبيوتر البعيد)

من الناحية التقنية ، لا يتطلب PsExec تثبيتًا حيث أنه مجرد أداة سطر الأوامر ولكن يكفي. نظرًا لعدم الحاجة إلى تثبيت ، يتعين عليك فقط تنزيل واستخراجه من ملف ضغط PsTools. لا يتوفر PsExec كأداة مستقلة وهو جزء من مجموعة أدوات PsTools.

تنزيل PSExec

يمكنك إما استخراج ملف ZIP يدويًا أو استخدام قطعة برمجية PowerShell لتنزيل واستخراج PsExec من ملف ZIP الخاص به. يرجى ملاحظة أن ذلك يزيل جميع أدوات PsTools الأخرى. لا تزال العديد منها مفيدة ولكننا لن نغطيها في هذه المقالة.

PS> Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/PSTools.zip' -OutFile 'pstools.zip'
PS> Expand-Archive -Path 'pstools.zip' -DestinationPath "$env:TEMP\pstools"
PS> Move-Item -Path "$env:TEMP\pstools\psexec.exe" .
PS> Remove-Item -Path "$env:TEMP\pstools" -Recurse

تكوين الكمبيوتر عن بُعد

بمجرد تنزيل PsExec ، ستحتاج بعد ذلك إلى التأكد من أن أي كمبيوتر عن بُعد تعتزم تشغيله مفتوح. يتطلب PsExec متطلبات بسيطة ؛ تمكين الملف ومشاركة الطابعة وتوفر المشاركة الإدارية admin$.

يمكنك الانتقال إلى جميع أجهزة الكمبيوتر عن بُعد ، وفتح نافذة جدار الحماية في Windows ، والانتقال إلى التطبيقات المسموحة وتمكين مشاركة الملفات والطابعات على جميع الأجهزة كما هو موضح أدناه.

يرجى ملاحظة أن مشاركة الملفات والطابعات تشكل مخاطر أمان معروفة ، لذا تأكد من تمكين ملف تعريف جدار الحماية الخاص فقط.

Allowing File and Print Sharing in the Windows Firewall

أو يمكنك زيارة كل كمبيوتر وتشغيل أداة netsh لفتحه باستخدام الأمر التالي:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

أو يمكنك استخدام أمر Set-NetFirewallRule في PowerShell للقيام بذلك.

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

إذا كنت لا ترغب في زيارة كل جهاز كمبيوتر ، فإن PowerShell Remoting متاح وإذا كنت في نطاق Active Directory ، يمكنك أيضًا فتح جدار الحماية على العديد من الأجهزة في وقت واحد باستخدام cmdlet Invoke-Command.

PS51> Invoke-Command -ComputerName PC1, PC2, PC3 -ScriptBlock { Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private }

باستخدام PsExec

قبل أن تتمكن من التشغيل ، تحتاج إلى المشي. إذا لم تستخدم PsExec من قبل ، فستجد متعة كبيرة! تأكد من قراءة هذا القسم أولاً للتعرف على الأساسيات قبل الانتقال إلى موضوعات أعمق في هذه المقالة.

في المرة الأولى التي تشغل فيها PsExec على نظام جديد ، سترى فورًا اتفاقية ترخيص PsExec. يجب عليك النقر فوق زر موافق لبدء استخدامه.

PSExec license agreement (EULA)

إذا كنت ترغب في منع ظهور اتفاقية الترخيص ، يمكنك قبولها صامتة باستخدام مفتاح /accepteula كما هو موضح أدناه.

> psexec /accepteula

ستتعلم بعض الحيل لكتم هذا النافذة المنبثقة EULA على الكمبيوترات المحلية وعن بُعد لاحقًا في هذه المقالة.

العثور على المساعدة

عند استكشاف PsExec ، يجب ألا تستخدم أي مفتاح على الإطلاق. عندما تشغل ببساطة الأمر psexec بدون أي مفاتيح ، ستظهر جميع الخيارات وشرح موجز لكل خيار. جميع الخيارات موجودة في الجدول أدناه لراحتك.

Switch Explanation
-a Separate processors on which the application can run with commas where 1 is the lowest numbered CPU. For example, to run the application on CPU 2 and CPU 4, enter: “-a 2,4”
-c Copy the specified program to the remote system for execution. If you omit this option the application must be in the system path on the remote system.
-d Don’t wait for process to terminate (non-interactive).
-e Does not load the specified account’s profile.
-f Copy the specified program even if the file already exists on the remote system.
-i Run the program so that it interacts with the desktop of the specified session on the remote system. If no session is specified the process runs in the console session. Some have reported best results always using the -s switch with -i due to windows being unintelligible.
-h If the target system is Vista or higher, has the proc
-l Run process as limited user (strips the Administrators group and allows only privileges assigned to the Users group). On Windows Vista the process runs with Low Integrity.
-n Specifies timeout in seconds connecting to remote computers.
-p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
-r Specifies the name of the remote service to create or interact. with.
-s Run the remote process in the System account.
-u Specifies optional user name for login to computer.
-v Copy the specified file only if it has a higher version number or is newer on than the one on the remote system.
-w Set the working directory of the process (relative
-x Display the UI on the Winlogon secure desktop (local system only).
-arm Specifies the remote computer is of ARM architecture.
-priority Specifies -low, -belownormal, -abovenormal, -high or
-realtime run the process at a different priority. Use
-background run at low memory and I/O priority on Vista.
computer Direct PsExec to run the application on the computer or computers specified. If you omit the computer name PsExec runs the application on the local system, and if you specify a wildcard (\*), PsExec runs
@file PsExec will execute the command on each of the computers listed in the file.
-accepteula This flag suppresses the display of the license dialog.
-nobanner Do not display the startup banner and copyright message.

تشغيل أمر بسيط عن بُعد

على أبسط وجه، يتطلب PsExec معلمتين: اسم الكمبيوتر والأمر الذي سيتم تشغيله. إذا كان لديك أمر لتشغيله على الكمبيوتر البعيد الذي لا يتطلب أي وسيطات مثل hostname، يمكنك ببساطة إضافته بعد اسم الكمبيوتر.

يرجى ملاحظة أنه إذا لم تحدد مسار ملف كامل، يجب أن يكون الأمر الذي سيتم تشغيله في مسار المستخدم أو النظام. أيضًا، إذا كان لديك برنامج بمسافات في الاسم، يمكنك دائمًا وضع البرنامج بين علامات التنصيص مثل “my application.exe”.

> psexec \\REMOTECOMPUTER hostname

يمكنك أن ترى أدناه أنه لتنفيذ أمر hostname على جهاز الكمبيوتر CONTOSODC1، تحدد مسار UNC ثم الأمر. سيتصل PSExec بجهاز الكمبيوتر البعيد بأمان، وينفذ الأمر ويعيد النتيجة. في هذه الحالة، أعاد أمر hostname اسم المضيف للكمبيوتر وهو CONTOSODC1.

إذا كان الأمر ليس cmd أو غيره من وحدات التحكم، سينهي PsExec بسرعة الجلسة البعيدة ويعيد رمز الخروج الذي أرجعه العملية البعيدة.

ملاحظة: الخطأ أو رمز الخروج الذي يتم إرجاعه من psexec لا يأتي من PsExec نفسه، بل يأتي من الأمر الذي نفذه psexec على الكمبيوتر البعيد.

Successful psexec remote command execution

كيف يعمل PsExec على الكمبيوترات البعيدة

يقوم PsExec بعدة خطوات لتنفيذ البرامج على الكمبيوترات البعيدة.

  1. إنشاء ملف PSEXESVC.exe في C:\Windows.
  2. إنشاء وتشغيل خدمة Windows على الكمبيوتر البعيد تسمى PsExec.
  3. تنفيذ البرنامج تحت عملية أم رئيسية تسمى psexesvc.exe.
  4. عند الانتهاء ، سيتم إيقاف وإزالة خدمة PsExec في نظام التشغيل Windows.

عند عدم عمل العملية بشكل صحيح بنسبة 100٪ ، قد تضطر إلى إزالة الخدمة يدويًا باستخدام أمر sc.

تشغيل أمر محلي بسيط

على الرغم من أن PsExec معروف بشكل أفضل بتشغيل الأوامر على أجهزة الكمبيوتر البعيدة ، إلا أنه يمكنك أيضًا تشغيل الأوامر محليًا.

يمكنك تشغيل الأوامر محليًا عن طريق عدم توفير اسم الكمبيوتر كما في الأمثلة أدناه.

> psexec <local command or EXE file>

لماذا تفعل ذلك؟ يمكن لسبب واحد أن يكون تنفيذ الأوامر كحساب SYSTEM المحلي. يمكنك استخدام مفتاح -s لتشغيل أي أمر ك SYSTEM محليًا أو عن بُعد كما ستتعلم المزيد في وقت لاحق.

شاهد الفيديو القصير أدناه. لاحظ أنه يكفي أن تقدم مفتاح -s مع مُشغل الأوامر لـ psexec لبدء جلسة أمر جديدة كـ NT AUTHORITY\SYSTEM.

Running Psexec as SYSTEM

أوامر PsExec (للحصول على مزيد من المهارات)

بمجرد أن تتعلم الأساسيات ، يمكنك بدء تعلم تقنيات متقدمة في psexec. يمكن لـ PsExec أن يفعل أكثر من مجرد تشغيل أمر واحد على جهاز كمبيوتر واحد.

تشغيل الأوامر على عدة أجهزة كمبيوتر

لا يقتصر PsExec على تشغيل الأوامر على جهاز كمبيوتر بعيد واحد في كل مرة. تحتوي هذه الأداة أيضًا على دعم لنسخ البرامج وتشغيل الأوامر على عدة أجهزة كمبيوتر في وقت واحد.

يمكنك تشغيل PsExec على عدة أجهزة كمبيوتر في وقت واحد عدة طرق مختلفة.

أسماء الكمبيوتر المفصولة بفواصل

عادةً ما يتم تشغيل أمر على جهاز كمبيوتر بعيد واحد ، حيث يتم تحديد اسم جهاز الكمبيوتر الواحد كـ \\REMOTECOMPUTER. يمكنك أيضًا تحديد عدة أجهزة كمبيوتر مفصولة بفواصل كما هو موضح أدناه.

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

جميع أجهزة الكمبيوتر في نطاق Active Directory

إذا كنت تقوم بتشغيل PsExec على جهاز متصل بنطاق Active Directory وترغب في تنفيذ أمر على جميع أجهزة الكمبيوتر في ذلك النطاق ، فيمكنك استخدام البدل العام.

سيبحث PsExec في كل نطاق Active Directory الخاص بك ويحاول تشغيل الأمر على كل جهاز كمبيوتر. فيما يلي مثال لبناء بناء جملة كيفية محاولة PsExec للاتصال بكل جهاز كمبيوتر في النطاق الذي يتم تنفيذ الأمر فيه وتشغيل أمر hostname.

> psexec \\* hostname

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Enumerating domain...


يرجى ملاحظة أنه إذا استخدمت النجمة للعثور على جميع أجهزة الكمبيوتر في النطاق أثناء تواجد الكمبيوتر المحلي في مجموعة عمل ، فستتلقى رسالة الخطأ حدث خطأ في النظام: 6118.

استخدام البدل العام يجبر PsExec في الأساس على تشغيل الأمر net view /all للعثور أولاً على جميع أجهزة الكمبيوتر في النطاق. هذه طريقة قديمة للعثور على معلومات الكمبيوتر نظرًا لاعتمادها على NetBIOS.

القراءة من ملف

طريقة أخرى يمكنك من خلالها تشغيل الأوامر على عدة أجهزة كمبيوتر في وقت واحد هو استخدام ملف نصي. باستخدام بناء الجملة @<filename.txt> ، ستقرأ PsExec كل سطر في ملف النص كما لو كان اسم جهاز كمبيوتر. ستقوم بمعالجة كل جهاز كمبيوتر بشكل منفصل.

فيما يلي يمكنك رؤية مثال على استخدام PowerShell لإنشاء ملف نصي يحتوي على أسماء أجهزة الكمبيوتر المفصولة بأسطر واستخدام ذلك كإدخال لـ psexec.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txt
PS51> psexec @computers.txt hostname

نسخ برامج محلية إلى الكمبيوتر البعيد

باستخدام مفتاح التبديل -c، ستقوم أداة psexec بنسخ أي برنامج محلي إلى الكمبيوتر البعيد قبل التنفيذ.

ربما تحتوي على ملف تنفيذي (EXE) على جهاز الكمبيوتر المحلي في مجلد C:\Tools وترغب في تشغيله على جهاز كمبيوتر بعيد. يمكنك القيام بذلك باستخدام الصيغة التالية:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

عند استخدام مفتاح التبديل -c وعدم تحديد ملف تنفيذي، ستقوم PsExec بعد ذلك بنسخ الملف ولكن ستتلقى خطأ يشير إلى أن النظام لا يمكن العثور على الملف المحدد. يحدث ذلك لأن PsExec سيحاول دائمًا تشغيل الملف الذي تم نسخه.

إذا كنت بحاجة إلى نسخ الملفات إلى أجهزة الكمبيوتر البعيدة قبل استخدام PsExec، استخدم أمر Copy-Item في PowerShell cmdlet بدلاً من ذلك.

تشغيل العمليات البعيدة باستخدام بيانات اعتماد بديلة

واحدة من الاستخدامات الشائعة لـ PsExec هي تشغيل الأوامر باستخدام حسابات بديلة. بشكل افتراضي، ستحاول PsExec الاتصال بالكمبيوتر البعيد باستخدام حسابك الحالي المسجل الدخول إليه. على وجه التحديد، سيتم تمثيل حسابك على الكمبيوتر البعيد.

باستخدام مفتاح التبديل -u واختيارياً مفتاح -p، يمكنك الاتصال بالكمبيوتر البعيد باستخدام حساب مستخدم بديل. بعد ذلك، ستقوم PsExec بتشفير كل من اسم المستخدم وكلمة المرور وإرسالهما إلى الكمبيوتر البعيد للمصادقة.

على سبيل المثال، إذا كنت في مجموعة عمل، فسيكون عليك دائمًا تحديد اسم المستخدم للمصادقة على الكمبيوتر البعيد.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p secret-p@$$word

إذا كان كلا الكمبيوترين عضوين في Active Directory، تأكد من إضافة اسم النطاق قبل حساب المستخدم.

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p secret-p@$$word

لاحظ أنه عندما لا تستخدم مفتاح الأمر “-u”، فإن psexec يتبع شخصيتك المسجلة في الحساب على الكمبيوتر البعيد. ولن يكون لديها وصول إلى أي موارد شبكية.

تشغيل العمليات بواسطة حساب LOCAL SYSTEM

إحدى الميزات الأكثر فائدة في تشغيل PsExec تحت حساب بديل هو استخدام مفتاح الأمر “-s”. يسمح هذا المفتاح لـ PsExec (وتطبيقك الذي يعمل عن بُعد) بالتشغيل باستخدام حساب LOCAL SYSTEM على الكمبيوتر البعيد (أو المحلي).

لاحظ أنني لم أدرج اسم كمبيوتر بعيد أدناه. سيُشغِّل PsExec بسرورية على الكمبيوتر المحلي أيضًا. في هذه الحالة، أستخدم الخيار “-s” لإخبار PsExec بتشغيل سطر الأوامر المحلي كحساب LOCAL SYSTEM.

Running psexec as LOCAL SYSTEM

لتشغيل سطر الأوامر كحساب LOCAL SYSTEM على كمبيوتر بعيد، أضف اسم الكمبيوتر إلى الإشارة كما هو موضَّح أدناه:

> psexec -s \\REMOTECOMPUTER cmd

تشغيل تطبيقات واجهة المستخدم الرسومية عن بُعد

مفتاح الأمر الآخر المفيد في PsExec هو “-i”. بشكل افتراضي، لا يسمح PsExec بأن يظهر الأمر المشغَّل عن بُعد أي نوافذ على الكمبيوتر البعيد. وهذا مفيد لأنه إذا كنت تنفذ الأوامر عن بُعد، فلن ترى الشاشة على أي حال.

ولكن ربما تحتاج إلى تشغيل برامج للمستخدمين النهائيين. فأنت شخصيًا لن تستخدم التطبيق ولكن سيقوم المستخدم النهائي بذلك. في هذه الحالة، استخدم مفتاح الأمر “-i”.

ربما تحتاج إلى فتح نافذة مفكرة على جهاز كمبيوتر بعيد. ليس هناك أي مشكلة. قم بتشغيل “notepad.exe” مع مفتاح الأمر “-i” وسيقوم PsExec بفتح المفكرة.

> psexec -i \\REMOTECOMPUTER notepad
Running psexec in interactive mode

تأكد أيضًا من استخدام مفتاح الأمر -d للفصل عندما يتم عرض النافذة التفاعلية. بشكل افتراضي ، سينتظر PsExec اكتمال العملية التي قام بتنفيذها. إذا تم الاحتفاظ بتشغيل العملية البعيدة (مثل Notepad في هذه الحالة) ، فلن يعيد PsExec التحكم.

باستخدام مفتاح الأمر -d مع -i سيخبر PsExec بعدم الانتظار حتى ينتهي العملية البعيدة. بدلاً من ذلك ، سيفصل الاتصال ويعيد التحكم إليك بمجرد تنفيذ العملية البعيدة.

إعادة توجيه الإخراج

سيعتمد Psexec على أي إخراج يتم إرساله من العملية البعيدة إلى جلسةك المحلية. عادةً ، سيتم إرسال هذا الإخراج مباشرة إلى وحدة التحكم المحلية الخاصة بك. ولكن إذا كنت ترغب في إعادة توجيهه ، يمكنك القيام بذلك باستخدام مشغلات إعادة التوجيه النموذجية.

على سبيل المثال ، إذا كنت ترغب في تشغيل أمر وكتم جميع الإخراج ، يمكنك إعادة توجيه الإخراج والأخطاء إلى null باستخدام ^> nul ^2^&1.

لاحظ أن الأحرف الخاصة تمت معالجتها باستخدام قبعة. (^).

حالات استخدام PsExec

بمجرد أن تتعلم كيفية استخدام psexec ، فإنك ستواجه بالتأكيد حالات استخدام محددة. في هذا القسم ، ستتعلم بعض حالات الاستخدام العملية وأمثلة استخدام psexec.

تشغيل سطر أوامر بعيد (psexec cmd)

واحدة من أكثر حالات الاستخدام شيوعًا هي تشغيل PsExec كموجه أوامر تفاعلي. لا يقوم PsExec فقط بتشغيل الأوامر عن بُعد، بل يمكنه أيضًا إرسال نتائج الأوامر إلى وحدة التحكم الخاصة بك. وبفضل ذلك، يمكن استخدامه كأداة رائعة للـ telnet (إذا كنت لا تزال تستخدمها) أو بديلًا لـ PowerShell Enter-PSSession.

لتشغيل أمر عن بُعد، قم بتحديد اسم الكمبيوتر البعيد وتشغيل تطبيق cmd. سيتم استخدام cmd كبرنامج تفسير الأوامر في نظام التشغيل Windows. وبما أن PsExec يدعم الاستخدام التفاعلي، فإنه سيعيد بكل سرور المؤشر المتحرك والدالة.

> psexec \\REMOTEPC cmd
Opening a command prompt on a remote computer

في هذه النقطة، يمكنك تشغيل الأوامر على الكمبيوتر المحلي من خلال سطر الأوامر “المتداخل” هذا وسيتم تنفيذها على الكمبيوتر البعيد.

للخروج من سطر الأوامر، اكتب exit. سيتوقف PsExec عن تشغيل عملية “cmd” على الكمبيوتر البعيد ويعيد التركيز إلى الكمبيوتر المحلي.

لا تستخدم Ctrl-C لإغلاق جلسة تفاعلية في cmd. استخدم دائمًا exit. إذا استخدمت Ctrl-C، ستظل جلسة psexec قيد التشغيل على الكمبيوتر البعيد.

تثبيت البرامج عن بُعد

يمكنك استخدام PsExec كأداة تثبيت برامج بديلة. ربما لديك مثبت MSI تحتاج إلى تشغيله على كمبيوترات بعيدة واحدة أو أكثر بالاسم setup.msi. يجب نسخ هذا المثبت إلى الكمبيوترات البعيدة ثم تنفيذه باستخدام أداة msiexec.exe مع بعض الخيارات.

فيما يلي مثال عن كيفية استخدام PsExec لنشر البرامج عن بُعد. يقوم هذا المثال بنسخ setup.msi إلى الكمبيوتر البعيد ثم يشغل برنامج تثبيت MSI بشكل تفاعلي باستخدام حساب SYSTEM.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

بدون استخدام مفتاح التبديل /accepteula لقبول اتفاقية ترخيص المستخدم النهائي

كما ذكر سابقًا، عند تشغيل PsExec للمرة الأولى، يتعين عليك قبول اتفاقية ترخيص المستخدم النهائي. يمكنك استخدام مفتاح التبديل /accepteula ولكن يمكنك أيضًا “ترتيبه” في التسجيل.

عند تشغيله للمرة الأولى، ينشئ PsExec مفتاح تسجيل في المسار HKCU\Software\Sysinternals\PsExec. بدلاً من ذلك، ينشئ قيمة تسجيل تسمى EulaAccepted بقيمة DWORD 1.

من خلال استخدام طريقتك المفضلة لتعديل التسجيل على أجهزة الكمبيوتر البعيدة، يكفي فقط إنشاء هذا المفتاح/القيمة على الأجهزة التي ترغب في تشغيل PsExec عليها. بمجرد إنشائها، لا حاجة لتشغيل /accepteula!

دمج PowerShell و PsExec

قبل PowerShell، كان لدينا فقط PsExec. الآن، لدينا خيارات. يمكن لـ PowerShell أن يحل محل PsExec في العديد من الحالات ويكمله في حالات أخرى.

إنشاء أسماء أجهزة الكمبيوتر باستخدام PowerShell

بدلاً من استخدام \\* للعثور على جميع أجهزة الكمبيوتر في النطاق، يمكنك استخدام PowerShell بدلاً من ذلك. باستخدام PowerShell، يمكنك ليس فقط اختيار بعض أجهزة الكمبيوتر ولكنك لا تحتاج إلى استخدام سلوك net view /all الذي يعرض الجدار الناري.

يمكنك استخدام PowerShell لإنشاء سلسلة تحتوي على جميع أسماء أجهزة الكمبيوتر مفصولة بفاصلة. يمكنك بعد ذلك تمرير تلك السلسلة إلى PsExec الذي سيقوم بمعالجة كل جهاز تلقائيًا تمامًا كما لو كتبت كل جهاز يدوياً.

يمكنك أن ترى أدناه مثالًا على استخدام cmdlet Get-AdComputer الجزء من ActiveDirectory وحدة الطاقة.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

تمكين تناثر PowerShell عن بُعد

إذا كان لديك أجهزة كمبيوتر عن بُعد تفضل استخدام تناثر PowerShell معها بدلاً من PsExec ، يمكنك استخدام PsExec لتمكينها.

من خلال تشغيل Enable-PSRemoting أو ملف الدفع batch winrm.cmd على أجهزة الكمبيوتر عن بُعد ، يمكنك تشغيل تناثر PowerShell بسرعة عبر العديد من الأجهزة في وقت واحد.

أدناه يمكنك رؤية مثال على استدعاء ملف الدفع batch winrm.cmd على جهاز كمبيوتر عن بُعد يعمل كحساب SYSTEM. نظرًا لعدم الحاجة إلى الإخراج من هذا الأمر ، فهو مكتوم باستخدام 2>&1> $null.

$computerName = 'REMOTECOMPUTER'
psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

رسائل خطأ PsExec

من الجدير بالذكر مرة أخرى مسبقًا أن معظم رموز الخطأ التي تراها تعود إلى العملية البعيدة ؛ ليس من PsExec. ولكن من المفيد أن تكون لديك فهم لهذه الرموز وما يمكن أن تعنيه.

إذا كنت ترغب في الحصول على مرجع لجميع رموز الخطأ في Windows ، فأوصي بالتحقق من هذه القائمة الشاملة لرموز الخطأ في Windows.

أدناه قائمة برموز الخطأ الشائعة التي قد تراها مرتجعة من قبل PsExec.

Error Code Explanation
-2146232576 Typically returned by Windows Update when an error occurs.
0 Command executed successfully
1 Incorrect function. A problem happened. That’s about it.
1603 Fatal error during installation. This typically is returned by msiexec.
2 The system cannot find the file specified
4 The system cannot open the file.
5 Access is denied.
6 The handle is invalid.
6118 The list of servers for this workgroup is not currently available

ملاحظاتك

أدلة ATA النهائية هي كبيرة. هناك الكثير من المعلومات في هذه الأدلة ومن المحتمل أن أفوت شيئًا هنا أو هناك أو أرتكب خطأ. إذا لاحظت أي شيء خاطئ أو اعتقدت أنه يجب إضافة شيء إلى هذا الدليل، يرجى إعلامي عبر التعليقات. سأكون سعيدًا لأن أنسب لك الفضل في المنشور.

الاعتمادات

  • شكرًا لماثياس (التعليقات) على العديد من الملاحظات.

Source:
https://adamtheautomator.com/psexec/