يعد دعم التشغيل الصحيح والصحيح لأجهزة الكمبيوتر والبرامج الخاصة بالمستخدمين العاديين روتينًا لموظفي الدعم الفني و / أو المسؤولين. إذا كانت الشركة صغيرة ، وكل شخص في غرفة واحدة أو غرفتين ، فمن السهل عادةً أن تذهب بنفسك وتحل المشكلة أو تتحقق مما تحتاجه.
ولكن ماذا لو كانت الشركة كبيرة والمستخدم في موقع مختلف / في مدينة / بلد آخر؟

واحدة من الأدوات الكلاسيكية لمثل هذا العمل هي الاتصال عن بعد (باستخدام RDP ، برنامج مثل TeamViewer / Skype مع عرض توضيحي لسطح المكتب ، وما إلى ذلك). ومع ذلك ، لا يخلو من العيوب الأساسية:
- على أي حال ، سيتم تشتيت انتباه المستخدم النهائي عن عمله (في بعض الحالات ، حتى دون رؤية سطح المكتب الخاص به)
- لن تعمل هذه الأدوات دائمًا إذا كانت هناك أخطاء على الكمبيوتر البعيد
- تثبيت برنامج طرف ثالث (بما في ذلك الملكية ، في حالة برنامج TeamViewer) بعيدًا عن سياسة الشركة
- الطريقة غير مؤتمتة عمليا
أخيرًا - يتم استخدام هذا النهج عند وقوع الحادث بالفعل (من الصعب تخيل أن المسؤول يتصل من وقت لآخر "بشكل وقائي" بكل مستخدم). هذا هو السبب في أهمية آلية التحكم (المراقبة) لأجهزة الكمبيوتر البعيدة.
أحد الحلول الممكنة هو استخدام الوصول عن بعد إلى تسجيل Windows. يقوم بتخزين البيانات في شكل قاعدة بيانات هرمية ، والتي تسمح لك بتلقيها وتخزينها بسرعة. يستخدمون السجل لتخزين إعداداتهم ومعلماتهم الخاصة بكل من نظام التشغيل والخدمات المضمنة ، بالإضافة إلى معظم برامج الجهات الخارجية. لذلك ، تؤثر محتويات التسجيل بطرق عديدة على تشغيل النظام.
بناءً على ذلك ، يمكن استخدام السجل "كمؤشر" للمراقبة (يمكنك اكتشاف خطأ إذا كان مرتبطًا بمعلمات غير صحيحة في التسجيل أو محاكاة موقف إشكالي).
الاحتمال الآخر الذي يعطيه هذا الحل هو إمكانية التحكم الإداري للمستخدمين (على سبيل المثال ، تتيح لك القراءة عن بعد رؤية حقائق تثبيت البرامج غير المرغوب فيها وإجراء تغييرات على الإعدادات) - لا تنس تأثير "العامل البشري" على النظام. من الناحية العملية ، كان هذا مفيدًا في إطار مشروع SkypeTime ، حيث كان من الضروري تتبع تصحيح الإعدادات في Skype for Business.

لكن السجل يحتوي على آلاف الإدخالات ؛ ومن الصعب للغاية التحكم فيها جميعًا. لذلك ، أولاً وقبل كل شيء ، من الضروري تحديد موضوع التحكم - لتحديد أي معلمات معينة تهمنا ، ولمعرفة فروع التسجيل المحددة التي توجد فيها القيم المقابلة. كقاعدة ، ليس من الصعب العثور على الأخير في الوثائق / الإنترنت ، أو تحديده بشكل مستقل بناءً على أسماء المفاتيح.
بعد تحديد موضوع التحكم ، يمكنك المتابعة إلى التكوين المباشر للوصول عن بُعد. للقيام بذلك ، تحتاج إلى تنشيط خدمة استدعاء الإجراء البعيد على أجهزة الكمبيوتر البعيدة وتكوين جدار الحماية حسب الضرورة ، والذي يتم بشكل ملائم باستخدام سياسات المجموعة. بالنظر إلى متطلبات الأمان ، يتطلب الوصول حقوق مسؤول المجال أو المسؤول المحلي على كل جهاز.
تكوين الوصول عن بعدلتنشيط الخدمة نفسها ، في تكوين الكمبيوتر> التفضيلات> إعدادات لوحة التحكم> قسم الخدمات ، قم بتعيين المعلمات لخدمة RpcS ، كما في لقطة الشاشة

يبقى لإضافة استثناءات جدار الحماية المناسبة. في نفس السياسة ، ضمن تكوين الكمبيوتر> السياسات> إعدادات Windows> إعدادات الأمان> جدار حماية Windows مع الأمان المتقدم> قواعد الوارد ، قم بإنشاء قاعدة جديدة:
نوع القاعدة - مخصص

حدد مسار البرنامج -٪ SystemRoot٪ \ system32 \ svchost.exe
من الإعدادات الإضافية في قسم الخدمات ، قم بتعيين تطبيق على الخدمة بالاسم المختصر التالي - Winmgmt

في الصفحات التالية نحدد TCP بدون تحديد منافذ محددة ولجميع العناوين


والسماح بالاتصال ( السماح بالاتصال) لملف تعريف المجال


ومع ذلك ، فإن التحكم يدويًا في تسجيل العشرات والمئات من أجهزة الكمبيوتر "يدويًا" (حتى في حالة استخدام عدد قليل من الإدخالات) يعد مهمة جاحدة وعديمة الجدوى. لحسن الحظ ، هذه العملية بسيطة للغاية لأتمتة استخدام البرامج النصية. على سبيل المثال ، يتيح لك البرنامج النصي PowerShell التالي معرفة أي مستخدم قام بتغيير معلمات AwayThreshold و IdleThreshold (وقت التبديل إلى الحالة "خارج المكان" و "غير نشط") لـ Skype for Business.
كود البرنامج النصيParam ( [alias("c")] [string]$FromFileComputers, [alias("r")] [string]$OutputRPCErrorsFile, [alias("u")] [string]$FromFileUsers, [alias("o")] [string]$OutputFile="output.csv", [alias("a")] [int]$MinAway, [alias("i")] [int]$MinIdle ) $RPCErrorsArray = @() $result = @() $HKU = 2147483651 $RegistryForCheckArray = "SOFTWARE\Microsoft\Office\13.0\Lync","SOFTWARE\Microsoft\Office\14.0\Lync","SOFTWARE\Microsoft\Office\15.0\Lync","SOFTWARE\Microsoft\Office\16.0\Lync","SOFTWARE\Microsoft\Communicator" $CurrentComputerNumber = 0; if(![string]::IsNullOrEmpty($FromFileUsers)) { $Users = Get-Content $FromFileUsers; } if(![string]::IsNullOrEmpty($FromFileComputers)) { $Comps = Get-Content $FromFileComputers; } else { $date = (get-date).AddMonths(-1) $Comps = Get-ADComputer -filter { lastlogontimestamp -ge $date } | select name | ForEach-Object {$_.name} #$Comps = "NB_CY" } $ServersCount = ($Comps).Count; Foreach ($Comp in $Comps) { $CurrentComputerNumber++ try { Write-Host "Checking: $Comp [$CurrentComputerNumber/$ServersCount]"; $profiles = Get-WmiObject Win32_UserProfile -filter "Loaded=$true and special=$false" -ComputerName $Comp -ErrorAction Stop $reg = [wmiclass]"\\$Comp\root\default:stdregprov" Foreach ($profile in $profiles) { $username = Split-Path $profile.LocalPath -Leaf if(![string]::IsNullOrEmpty($FromFileUsers)) { if(!$Users.Contains($username)) { continue; } } Foreach( $registry in $RegistryForCheckArray) { $hkey = "$($profile.sid)\$registry" #Write-Host "KEY: $hkey" $away = $reg.GetDWORDValue($hku,$hkey,"AwayThreshold").uValue $idle = $reg.GetDWORDValue($hku,$hkey,"IdleThreshold").uValue $sip = $reg.GetStringValue($hku,$hkey,"ServerSipUri").sValue if([string]::IsNullOrEmpty($away) -and [string]::IsNullOrEmpty($idle)) { continue; } if(($MinAway -gt 0 -and $away -lt $MinAway) -or ($MinIdle -gt 0 -and $idle -lt $MinIdle)) { continue; } $result += New-Object PsObject -Property @{ "PC" = $Comp "Username" = $username "SIP" = $sip "SFB_Away" = $away "SFB_Idle" = $idle } } } } catch { if ($_.Exception.GetType().Name -eq "COMException") { $RPCErrorsArray += $Comp; } Write-Host "Error: ($_.Exception.GetType().Name)"; $_.Exception } } $result | Export-csv -Path $OutputFile $result | Format-Table -Property PC,Username,SIP,SFB_Away,SFB_Idle -AutoSize Write-Host "Saved to: $OutputFile" if(![string]::IsNullOrEmpty($OutputRPCErrorsFile)) { $RPCErrorsArray | out-file $OutputRPCErrorsFile Write-Host "RPC errors saved to: $OutputRPCErrorsFile" }
لمزيد من الراحة ، يمكن تشغيل البرنامج النصي مع المعلمات:
-ج المسار إلى الملف مع قائمة بأجهزة الكمبيوتر اسم المضيف للتحقق ، إذا لم يتم تحديد - الحصول على أجهزة الكمبيوتر من م مع نشاط 30 يوما.
-r المسار إلى الملف الذي ستتم كتابة اسم المضيف لأجهزة الكمبيوتر التي بها خطأ RPC.
-u المسار إلى الملف بقائمة المستخدمين (تسجيل الدخول) ، إذا لم يتم تحديده ، يتحقق من الكل.
-o المسار إلى الملف الذي سيتم فيه تنفيذ نتيجة البرنامج النصي ، الافتراضي هو output.csv.
-الحد الأدنى لقيمة المعلمة AwayThreshold ، لن تحصل السجلات ذات القيمة الأقل من القيمة المحددة على نتيجة تنفيذ البرنامج النصي.
-i القيمة الدنيا لمعلمة IdleThreshold ، لن تحصل السجلات ذات القيمة الأقل من القيمة المحددة على نتيجة البرنامج النصي.
علاوة على ذلك ، يمكن أتمتة البرنامج النصي عن طريق الإضافة إلى برنامج جدولة المهام لـ Windows (برنامج جدولة المهام) أو من خلال وظيفة Sheduled Job في PowerShell.