باستخدام الاتصال عن بُعد PowerShell ، يمكننا الاتصال بسلاسة بالكمبيوتر البعيد وتشغيل الأوامر عليه تمامًا كما يمكن على الكمبيوتر المحلي لدينا. يشبه الاتصال عن بعد PowerShell psexec بهذه الطريقة. بمجرد إعداد هذه الوظيفة ، تعمل هذه الوظيفة بشكل رائع. ولكنك ستكتشف قريبًا أنها لا تعمل بشكل رائع بمجرد محاولة الوصول إلى موارد الشبكة من جلسة الاتصال البعيدة نفسها. للتوضيح ، دعنا نقول أن لدي ثلاث آلات: CLIENT1 و SRV1 و SRV2 جميعها في نفس مجال Active Directory. على CLIENT1 ، قمت بتشغيل أمر على SRV2 باستخدام Invoke-Commmand ، والذي يستخدم الاتصال عن بعد PowerShell. PS> استدعاء الأوامر -ComputerName SRV1 -ScriptBlock {'Yay! I & apos؛ m على خادم $ (hostname)!' } ياي! أنا & apos؛ m على خادم SRV1! PS> استدعاء الأوامر -ComputerName SRV1 -ScriptBlock {'Yay! I & apos؛ m على خادم $ (hostname)!' }ياي! أنا & apos؛ m على خادم SRV1! يعمل هذا جيدًا ، ولكن دعنا الآن نحاول سرد بعض الملفات على خادم SRV2 حيث أعرف أن لدي حقوقًا للقيام بذلك من الجلسة على خادم SRV1. PS> استدعاء الأوامر -ComputerName SRV1 -ScriptBlock {Get-ChildItem -Path SRV2 c $} الدخول محظور + CategoryInfo: PermissionDenied: ( SRV2 c $: String) [Get-ChildItem]، UnauthorizedAccessException + FullyQualifiedErrorId: ItemExistsUnauthorizedAccessError، Microsoft. GetChildItemCommand + PSComputerName: SRV1 لا يمكن العثور على المسار & apos؛ SRV2 c $ & apos؛ لأنه غير موجود. + CategoryInfo: ObjectNotFound: ( SRV2 c $: String) [Get-ChildItem] ، ItemNotFoundException + FullyQualifiedErrorId: PathNotFound ، Microsoft. GetChildItemCommand + PSComputerName: SRV1PS> Invoke-Command -ComputerName SRV1 -ScriptBlock {Get-ChildItem -Path SRV2 c $} + CategoryInfo: PermissionDenied: ( SRV2 c $: String) [Get-ChildItem] و UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError ، Microsoft. GetChildItemCommand لا يمكن العثور على المسار & apos؛ SRV2 c $ & apos؛ لأنه غير موجود. + CategoryInfo: ObjectNotFound: ( SRV2 c $: String) [Get-ChildItem] ، ItemNotFoundException + FullyQualifiedErrorId: PathNotFound ، Microsoft. والسبب هو أن الاتصال عن بُعد لـ PowerShell لا يسمح لنا بتمرير بيانات الاعتماد التي استخدمناها بشكل أساسي لإنشاء جلسة مع SRV1. عندما نحاول الاتصال بـ SRV2 بطريقة أو بأخرى ، فإنه لا يمر أي أوراق اعتماد وبالتالي ينكر علينا. إذا وجدت Google هذا الخطأ ، فسوف تجد الكثير من الأمثلة على 'حل' الأشخاص له باستخدام CredSSP. من المفترض أن يكون هذا غير آمن ويتطلب أيضًا تكوينًا إضافيًا في وقت مبكر. لقد اكتشفت مؤخرًا طريقة جديدة لحل هذه المشكلة التي تستخدم تكوينات الجلسة. تتيح لك هذه الطريقة 'الجديدة' ربط بيانات الاعتماد بتهيئة جلسة عمل PowerShell وإعادة استخدام هذا التكوين لجميع الاتصالات المستقبلية. للتظاهر ، دعنا أولا نصل إلى SRV1 مرة أخرى ولكن هذه المرة قم بتسجيل تكوين الجلسة على الخادم باستخدام حساب المجال. Invoke-Command -ComputerName SRV1 -ScriptBlock {Register-PSSessionConfiguration -Name 4SysOps -RunAsCredential & apos؛ domain mydomainaccount & apos؛ -Force} استدعاء الأوامر -ComputerName SRV1 -ScriptBlock {تسجيل-PSSessionConfiguration -Name 4SysOps -RunAsCredential & apos؛ domain mydomainaccount & apos؛ -Force} الآن سأستخدم تكوين الجلسة هذا في المرة القادمة التي أرغب فيها بتشغيل أمر على الكمبيوتر البعيد الذي يتصل بكمبيوتر ثالث. PS> استدعاء الأوامر -ComputerName & apos؛ SRV1 & apos؛ -سكربلوك {Get-ChildItem -Path SRV2 c $} -ConfigurationName 4SysOps Directory: SRV1 c $ وضع LastWriteTime Length Name PSComputerName ---- ------------- ------ ---- -------------- د ----- 11/30/2016 11:35 AM Program Files SRV1 د ----- 5/25/2017 11:32 صباحاً Windows SRV1 PS> استدعاء الأوامر -ComputerName & apos؛ SRV1 & apos؛ -سكربلوك {Get-ChildItem -Path SRV2 c $} -ConfigurationName 4SysOpsMode LastWriteTime Length Name PSComputerName ---- ------------- ------ ---- - ------------- د ----- 11/30/2016 11:35 صباحاً Program Files SRV1d ----- 5/25/2017 11:32 صباحاً Windows SRV1 حل PowerShell مزدوج مشكلة القفزة مع تكوينات الجلسةأنها تعمل بدون CredSSP! عند هذه النقطة ، يمكنك الاستمرار في استخدام Invoke-Command في الإرادة دون القلق بشأن مشكلة متعددة القفزات. تذكر فقط استخدام المعلمة ConfigurationName لتحديد التكوين الذي قمت بتشغيله تحت حساب المجال الخاص بك! والأفضل من ذلك ، يمكنك فقط إضافة هذه المعلمة إلى $ PSDefaultParameterValues وجعل PowerShell تستخدم هذا المعامل تلقائيًا في كل مرة تقوم فيها بالاتصال Invoke-Command.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
February 2019
Categories |