محاولة أتمتة العمليات باستخدام Powershell


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

في هذا الدليل ، سننظر إلى بعض الفرق الرائعة في رأي المؤلف ونوضح سبب ذلك. لنبدأ مع القصاصات.

قصاصات مفيدة:


نأتي الكمبيوتر إلى TrustedHosts

مفيدة عند الاتصال بالخادم عبر WinRm. سيقوم الأمر بالكتابة فوق القيمة السابقة ، وتوخي الحذر ، وإضافة ip أو أسماء المضيف مفصولة بفواصل. إذا كان جميع مضيفيك في م ، فلن تحتاج إلى لمس هذا الملف.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.0.1' 

تعمل Wildcard أيضًا إذا كنت لا ترغب في إضافة مضيف جديد إلى TrustedHosts في كل مرة.

 Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' 

نقوم بتخزين كلمة المرور في شكل مشفر في ملف:

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

إذا قمت بتشغيل البرامج النصية من مستخدم مسجل الدخول ، فسيتم استخدام أرصدة المستخدم.

 Read-Host -AsSecureString | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Password.txt 

نأخذ كلمة المرور المشفرة من الملف:

 $Password = Get-Content C:\Password.txt | ConvertTo-SecureString 

يمكن القيام بنفس الشيء باستخدام بيانات الاعتماد ، واستبدل "مضيف للقراءة" بـ "الحصول على بيانات اعتماد".

 Get-Credential | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath .\Credential.txt 

نحصل على تاريخ التمهيد الأخير لنظام التشغيل.

 (gcim win32_operatingsystem).LastBootUpTime 

بنفس الطريقة ، نحصل على الجهوزية أيضًا.

 Get-CimInstance Win32_operatingsystem -ComputerName $computers | Select-Object LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}} 

نحصل على قائمة البرامج المثبتة:

إنها برامج وليست مكونات:

 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize 


نحصل على قائمة محركات الأقراص ، بما في ذلك محركات أقراص الشبكة ومساحة خالية عليها

 Get-PSDrive -PSProvider filesystem | where-object {$_.used -gt 0} | Select-Object -property Root,@{name="Size";expression={($_.used+$_.free)/1GB -as [int]}}, @{name="Used";expression={($_.used/1GB) -as [int]}}, @{name="Free";expression={($_.free/1GB) -as [int]}} 

نوقف العملية باسمها.

في هذا المثال ، نوقف Chrome. Wildcard مناسب أيضًا إذا كنت تريد إكمال كل شيء.

 Get-Process -Name "chrome" | Stop-Process 

نسخ إعدادات الوصول إلى المجلد إلى المجلدات الفرعية

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

نسخ ACL من المجلد:

 $Acl = Get-Acl -Path C:\folder\ 

أدخل قائمة التحكم في الوصول (ACL) في جميع الملفات والمجلدات الفرعية:

 Get-ChildItem -Path C:\Folder\ -Recurse | Set-Acl $Acl 

مخطوطات مفيدة:


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

ج م:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName 

بدون ميلادي:

 $Credentials = Get-Credential $Computers = Get-Content -Path C:\servers.txt 

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

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) { Invoke-Command $i { Get-CimInstance Win32_operatingsystem | Select-Object LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}} } } 

نحصل على جميع البرامج المثبتة على جميع أجهزة الكمبيوتر AD:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        gcim win32_product -computername $env:computername | Sort-Object -property Vendor,Name | Select-Object -property Vendor,Name, Caption    } } 

يمكن الحصول على الشيء نفسه للمكونات ، باستبدال Invoke-Command:

 Get-WindowsFeature | Where-Object -Property "Installed" -EQ "Installed" 

نحصل على أجهزة الكمبيوتر التي تعمل فيها العملية التي نحتاج إليها:

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

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        Get-Process -Name "Chrome"  -ErrorAction SilentlyContinue    } } 

يمكن أن يكون قتل المتصفح سهلاً مثل الحصول على العملية:

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        Get-Process -Name "Chrome" | Stop-Process -ErrorAction SilentlyContinue    } } 

نحصل على أجهزة الكمبيوتر حيث تم تثبيت برنامج معين:

سرا في هذه الحالة جافا. سوف يساعدك أثناء عملية الجرد ، ويمكنك رؤية أسماء أجهزة الكمبيوتر التي تم تثبيتها فيه.

 $ADComputers = (Get-ADComputer -filter *).DNSHostName foreach ($i in $ADComputers) {    Invoke-Command -computername $i {        gcim win32_product -computername $env:computername | Select-String -Pattern "Java" -AllMatches | Sort-Object -property Vendor,Name | Format-Table -ErrorAction SilentlyContinue    } } 

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

نحن نقدم تعريفة محدثة UltraLite Windows VDS مقابل 99 روبل مع تثبيت Windows Server 2019 Core.

Source: https://habr.com/ru/post/ar483416/


All Articles