

مرحبًا بكم في Power Remote Desktop للوصول إلى سطح المكتب عن بُعد في PowerShell Pure! توفر هذه الوحدة حلًا فريدًا للتحكم عن بعد شاشات واحدة أو متعددة باستخدام PowerShell فقط. على عكس أدوات سطح المكتب عن بُعد الأخرى التي تعتمد على البروتوكولات والبرامج الخارجية ، تستخدم الوحدات النمطية بروتوكول سطح المكتب عن بُعد.
تتكون الوحدة من كل من العميل ومكون الخادم ، وكلاهما مكتوب بالكامل في PowerShell. يوفر بروتوكولنا اتصالًا آمنًا ومشفرًا باستخدام TLS ويوفر مصادقة كلمة المرور المستندة إلى التحدي والمصادقة القائمة على الشهادة.
بالإضافة إلى توفير التحكم الكامل للماوس ولوحة المفاتيح على سطح المكتب عن بُعد ، تكرر الوحدة النمطية أيضًا أيقونة مؤشر الماوس للمشاهد ، وتزامن الحافظة بين الأنظمة المحلية والبعيدة ، وأكثر من ذلك. على الرغم من قيود PowerShell ، قمنا بتنفيذ تقنيات لتحسين حركة مرور الشبكة وتحسين تجربة البث ، مما أدى إلى تجربة سطح مكتب ناعمة وفعالة.
في وقت كتابة هذا التقرير ، كان هذا هو تطبيق سطح المكتب عن بُعد القائم على PowerShell المعروف تمامًا. نأمل أن تجدها مفيدة ونرحب بأي تعليقات أو اقتراحات قد تكون لديك.
تم اختباره في:
الإصدار الحالي: 4.0.0 مستقر
للحصول على أداء أفضل للبث والخبرة الشاملة ، نوصي باستخدام PowerShell 7 بدلاً من PowerShell 5.
يمكنك تثبيت PowerShell 7 لنظام التشغيل Windows هنا

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "إذا كنت ترغب في تجنب استخدام شهادتك الخاصة ويفضل عدم المرور بعملية إنشاء واحدة ، فيمكنك إزالة خيار "الشهادة" وتشغيل PowerShell كمسؤول بدلاً من ذلك.
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "هذا كل شيء
هناك عدة طرق لاستخدام تطبيق PowerShell هذا. الطريقة الموصى بها هي تثبيت كل من مكونات الخادم والمشاهد باستخدام معرض PowerShell. بدلاً من ذلك ، يمكنك تثبيتها كوحدات أو استيرادها كنصوص يدويًا. اختر الطريقة التي تناسب احتياجاتك وتفضيلاتك.
يمكنك تثبيت سطح مكتب Power Remote من معرض PowerShell ، والذي يشبه الاستعداد لـ Debian أو Brew for MacOS. للقيام بذلك ، قم بتشغيل الأوامر التالية:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer يكون AllowPrerelease إلزاميًا عندما يتم تمييز الإصدار الحالي باعتباره مسبقًا
عند تشغيل الأمر ، قد ترى التحذير التالي في موجه الأوامر الخاص بك:
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
اكتب "y" للتأكيد والمتابعة مع التثبيت. عند اكتمال التثبيت ، يجب أن تكون كلتا الوحدات متاحة. يمكنك التحقق من ذلك عن طريق تشغيل الأمر التالي:
Get-Module - ListAvailableالإخراج مثال:
PS C:UsersPhrozenDesktop> Get-Module -ListAvailable
Directory: C:UsersPhrozenDocumentsWindowsPowerShellModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..snip..>
إذا لم تظهر الوحدات ، فحاول تشغيل الأوامر التالية ثم تحقق مرة أخرى:
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewerمن أجل توفر وحدة نمطية ، يجب أن تكون موجودة في مسار وحدة مسجلة. يمكنك عرض مسارات الوحدة النمطية المسجلة عن طريق تشغيل الأمر التالي:
Write-Output $ env: PSModulePathالإخراج مثال:
C:UsersPhrozenDocumentsWindowsPowerShellModules;C:Program FilesWindowsPowerShellModules;C:WINDOWSsystem32WindowsPowerShellv1.0Modules
استنساخ PowerRemotedesktop مستودع أو تنزيل حزمة إصدار github.
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
نسخ كلا powerremotedesktop_viewer و powerremotedesktop_server مجلدات إلى مسار الوحدة النمطية المطلوبة
مثال:
C:Users<USER>DocumentsWindowsPowerShellModules
يجب أن تكون كلتا الوحدات متاحة الآن ، يمكنك التحقق من استخدام الأمر:
Get-Module - ListAvailableالإخراج مثال:
PS C:UsersPhrozenDesktop> Get-Module -ListAvailable
Directory: C:UsersPhrozenDocumentsWindowsPowerShellModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..snip..>
إذا كنت لا تراهم ، فتشغيل الأوامر التالية وتسجيل الوصول مرة أخرى.
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewer إشعار: الملفات الواضحة اختيارية ( *.psd1 ) ويمكن إزالتها.
ليس إلزاميًا تثبيت هذا التطبيق كوحدة PowerShell (حتى لو كان امتداد الملف هو *.psm1 )
يمكنك أيضًا تحميله كنص PowerShell. توجد طرق متعددة بما في ذلك:
استدعاء الأوامر باستخدام:
IEX ( Get-Content .PowerRemoteDesktop_[ Server / Viewer ].psm1 - Raw)تحميل البرنامج النصي من موقع بعيد:
IEX ( New-Object Net.WebClient).DownloadString( ' http://127.0.0.1/PowerRemoteDesktop_[Server/Viewer].psm1 ' )إلخ...
يجب استيراد / أو تثبيت PowerRemoteDesktop_Viewer.psm1 على الجهاز المحلي.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers قم بإنشاء جلسة سطح مكتب عن بُعد جديدة مع خادم سطح مكتب عن بُعد.
| المعلمة | يكتب | تقصير | وصف |
|---|---|---|---|
| ServerAddress | خيط | 127.0.0.1 | مضيف أو عنوان الخادم البعيد |
| ServerPort | عدد صحيح | 2801 | رقم المنفذ للخادم البعيد |
| SecurePassword | Securestring | لا أحد | كائن Securestring الذي يحتوي على كلمة المرور المستخدمة للمصادقة مع الخادم البعيد (الموصى بها) |
| كلمة المرور | خيط | لا أحد | كلمة مرور النص العادي المستخدمة للمصادقة مع الخادم البعيد (غير مستحسن ؛ استخدم SecurePassword بدلاً من ذلك)) |
| DisableVerbosity | يُحوّل | خطأ شنيع | في حالة تحديد ، سيقمع البرنامج رسائل الفعل |
| USETLSV1_3 | يُحوّل | خطأ شنيع | إذا تم تحديده ، فسيستخدم البرنامج TLS V1.3 بدلاً من TLS V1.2 للتشفير (الموصى به إذا كان كلا النظامين يدعمونه) |
| الحافظة | التعداد | كلاهما | حدد وضع مزامنة الحافظة (تشمل الخيارات "كلا" و "معطل" و "إرسال" و "استقبال" ؛ انظر أدناه لمزيد من التفاصيل) |
| التصوير | عدد صحيح (0-100) | 75 | مستوى ضغط JPEG يتراوح من 0 (أدنى جودة) إلى 100 (أعلى جودة) |
| تغيير الحجم | يُحوّل | خطأ شنيع | في حالة تحديد ، سيتم تغيير حجم سطح المكتب البعيد وفقًا لخيار "Resizeratio" |
| ريزيزراتيو | عدد صحيح (30-99) | 90 | يستخدم بالاقتران مع خيار "تغيير الحجم" ، حدد نسبة تغيير الحجم كنسبة مئوية |
| دائما | يُحوّل | خطأ شنيع | في حالة تحديد ، سيتم عرض نافذة سطح المكتب الظاهري فوق جميع النوافذ الأخرى |
| الحزم | التعداد | حجم 9216 | حدد حجم حزمة الشبكة للتدفقات. اختر حجمًا مناسبًا لقيود الشبكة الخاصة بك. |
| الكتل | التعداد | حجم 64 | حدد حجم كتل شبكة الشاشة. اختر حجمًا مناسبًا لحجم الشاشة عن بُعد وموارد الكمبيوتر (مثل وحدة المعالجة المركزية وقدرات الشبكة) |
| logonui | يُحوّل | خطأ شنيع | اطلب من الخادم فتح سطح مكتب logonui/winlogon بدلاً من سطح مكتب المستخدم الافتراضي (يتطلب امتياز النظام في الجلسة النشطة) |
| قيمة | وصف |
|---|---|
| عاجز | يتم تعطيل مزامنة الحافظة على كل من جوانب المشاهد والخادم |
| يستلم | يُسمح فقط ببيانات الحافظة الواردة |
| يرسل | يُسمح فقط ببيانات الحافظة الصادرة |
| كلاهما | يُسمح بمزامنة الحافظة على كل من جوانب المشاهد والخادم |
| قيمة | وصف |
|---|---|
| Size1024 | 1024 بايت (1Kib) |
| Size2048 | 2048 بايت (2KIB) |
| Size4096 | 4096 بايت (4kib) |
| Size8192 | 8192 بايت (8kib) |
| حجم 9216 | 9216 بايت (9kib) |
| حجم 12288 | 12288 بايت (12kib) |
| حجم 16384 | 16384 بايت (16Kib) |
| قيمة | وصف |
|---|---|
| حجم 32 | 32x32 |
| حجم 64 | 64x64 |
| حجم 96 | 96x96 |
| حجم 128 | 128x128 |
| Size256 | 256x256 |
| حجم 512 | 512x512 |
يوصى باستخدام SecurePassword بدلاً من كلمة مرور النص العادي ، حتى إذا تم تحويل كلمة مرور النص العادي إلى Securestring
افتح جلسة سطح مكتب عن بُعد جديدة إلى "127.0.0.1:2801" باستخدام كلمة المرور "urcompl3xp@ssw0rd"
Invoke-RemoteDesktopViewer - ServerAddress " 127.0.0.1 " - ServerPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)عند الاتصال بخادم بعيد جديد لأول مرة ، سيسأل المشاهد عما إذا كنت تريد الوثوق بصمة الخادم. إذا قمت بتحديد خيار "الثقة دائمًا" في هذه البصمة ، فسيتم حفظه في سجل المستخدم المحلي. يمكنك إلغاء الثقة في هذه البصمة في أي وقت باستخدام الوظيفة المناسبة.
Get-TrustedServersالإخراج مثال:
PS C:UsersPhrozenDesktopProjectsPowerRemoteDesktop> Get-TrustedServers
Detail Fingerprint
------ -----------
@{FirstSeen=18/01/2022 19:40:24} D9F4637463445D6BB9F3EFBF08E06BE4C27035AF
@{FirstSeen=20/01/2022 15:52:33} 3FCBBFB37CF6A9C225F7F582F14AC4A4181BED53
@{FirstSeen=20/01/2022 16:32:14} EA88AADA402864D1864542F7F2A3C49E56F473B0
@{FirstSeen=21/01/2022 12:24:18} 3441CE337A59FC827466FC954F2530C76A3F8FE4
Remove-TrustedServer - Fingerprint " <target_ingerprint> " Clear-TrustedServers يجب استيراد / أو تثبيت PowerRemoteDesktop_Server.psm1 على الجهاز المحلي.
Invoke-RemoteDesktopServer | المعلمة | يكتب | تقصير | وصف |
|---|---|---|---|
| ServerAddress | خيط | 0.0.0.0 | عنوان IP الذي يمثل عنوان IP للآلة المحلية |
| ServerPort | عدد صحيح | 2801 | رقم المنفذ الذي يستمع إليه للاتصالات الواردة |
| SecurePassword | Securestring | لا أحد | كائن Securestring يحتوي على كلمة المرور المستخدمة لمصادقة المشاهدين عن بُعد (موصى بها) |
| كلمة المرور | خيط | لا أحد | كلمة مرور النص العادي المستخدمة لمصادقة المشاهدين عن بُعد (غير موصى بها ؛ استخدم SecurePassword بدلاً من ذلك) |
| DisableVerbosity | يُحوّل | خطأ شنيع | في حالة تحديد ، سيقمع البرنامج رسائل الفعل |
| USETLSV1_3 | يُحوّل | خطأ شنيع | إذا تم تحديده ، فسيستخدم البرنامج TLS V1.3 بدلاً من TLS V1.2 للتشفير (الموصى به إذا كان كلا النظامين يدعمونه) |
| الحافظة | التعداد | كلاهما | حدد وضع مزامنة الحافظة (تشمل الخيارات "كلا" و "معطل" و "إرسال" و "استقبال" ؛ انظر أدناه لمزيد من التفاصيل) |
| الشهادة | خيط | لا أحد | ملف يحتوي على معلومات شهادة صالحة (x509) يتضمن المفتاح الخاص |
| encodedCertificate | خيط | لا أحد | تمثيل مشفر من BASE64 لملف الشهادة بأكمله ، بما في ذلك المفتاح الخاص |
| عرض | يُحوّل | خطأ شنيع | في حالة تحديد ، لن يتمكن العارض عن بُعد فقط من عرض سطح المكتب ولن يتمكن من الوصول إلى الماوس أو لوحة المفاتيح |
| PreviceComputertOsleep | يُحوّل | خطأ شنيع | إذا تم تحديد ذلك ، فإن هذا الخيار سيمنع الكمبيوتر من إدخال وضع السكون أثناء نشط الخادم وينتظر اتصالات جديدة |
| CompregateSpassword | Securestring | لا أحد | حدد كلمة المرور المستخدمة للوصول إلى شهادة X509 المحمية بكلمة المرور التي يقدمها المستخدم |
| قيمة | وصف |
|---|---|
| 127.0.0.1 | استمع فقط للاتصالات من المضيف المحلي (عادة لأغراض تصحيح الأخطاء) |
| 0.0.0.0 | استمع إلى اتصالات على جميع واجهات الشبكة ، بما في ذلك الشبكة المحلية والإنترنت |
| قيمة | وصف |
|---|---|
| عاجز | يتم تعطيل مزامنة الحافظة على كل من جوانب المشاهد والخادم |
| يستلم | يُسمح فقط ببيانات الحافظة الواردة |
| يرسل | يُسمح فقط ببيانات الحافظة الصادرة |
| كلاهما | يُسمح بمزامنة الحافظة على كل من جوانب المشاهد والخادم |
Invoke-RemoteDesktopServer - ListenAddress " 0.0.0.0 " - ListenPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)
Invoke-RemoteDesktopServer - ListenAddress " 0.0.0.0 " - ListenPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force) - CertificateFile " c:certsphrozen.p12 " اعتبارًا من الإصدار 4.0.0 ، من الممكن التقاط logonui/winlogon (مطالبة UAC ، نافذة تسجيل الدخول Windows ، Ctrl+Alt+del ، إلخ).
ومع ذلك ، من أجل التقاط logonui ، يجب تشغيل الخادم تحت سياق "السلطة/النظام NT" في الجلسة النشطة الحالية.
هناك طرق متعددة لتفريغ عملية كمستخدم النظام في الجلسة النشطة (على سبيل المثال ، PSEXEC ، Process Hacker) ، ولكن من أجل البساطة أوصي باستخدام مشروع PowerRunassystem الخاص بي (متوفر على Github وقابل للتثبيت من خلال معرض PowerShell).
Install-Module - Name PowerRunAsSystemثم قم بتشغيل Command Bellow كمسؤول.
Invoke-InteractiveSystemPowerShellيجب أن تظهر محطة PowerShell جديدة على سطح المكتب كسلطة/نظام NT
إذا اتبعت الخطوات المذكورة أعلاه ، فيجب أن تظهر محطة PowerShell جديدة على سطح المكتب الذي يعمل كمستخدم "NT Authority/System".
من هذه المحطة ، يمكنك تشغيل الأمر Power Remote Desktop Server وتمكين خيار "logonui" لاتصالات عارض سطح المكتب عن بُعد في المستقبل.
تجدر الإشارة إلى أنه إذا لم تستخدم شهادة X509 الخاصة بك ، فستحتاج إلى امتيازات المسؤول لإنشاء خادم جديد. ومع ذلك ، يمكنك بسهولة إنشاء شهادة X509 الخاصة بك باستخدام أدوات مثل أداة سطر أوامر OpenSSL.
openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt
ثم قم بتصدير الشهادة الجديدة ( يجب تشمل المفتاح الخاص ).
openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt
استخدام CertificateFile . مثال: c:tlscertphrozen.crt
قم بتشفير شهادة موجودة باستخدام PowerShell
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))أو على أنظمة Linux / Mac
base64 -i /tmp/phrozen.p12
يمكنك بعد ذلك تمرير ملف شهادة Base64 إلى المعلمة EncodedCertificate (سطر واحد)


] و ) أرسلت وتفسيرها بشكل صحيح.؟ = سهل؟ = متوسط؟ = صعب
مصنوعة مع ❤ في ؟؟