Versuche Prozesse mit Powershell zu automatisieren


In diesem Artikel wird erläutert, warum wir alle Powershell lieben. All dies ist nützlich, wenn Sie eine Bestandsaufnahme durchführen, einen bestimmten Computer finden und andere Dinge. Powershell ist mit praktischen und einprägsamen Cmdlets ausgestattet, deren automatische Vervollständigung und intuitive Namen das Erlernen der Sprache wahrscheinlich am einfachsten machen.

In diesem Handbuch werden wir uns nach Meinung des Autors einige der coolen Teams ansehen und erklären, warum dies cool ist. Beginnen wir mit den Ausschnitten.

Nützliche Schnipsel:


Wir bringen den Computer zu TrustedHosts

Nützlich, wenn Sie über WinRm eine Verbindung zum Server herstellen. Der Befehl überschreibt den vorherigen Wert. Seien Sie vorsichtig und fügen Sie durch Kommas getrennte IP- oder Hostnamen hinzu. Wenn sich alle Ihre Hosts in AD befinden, müssen Sie diese Datei nicht berühren.

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

Platzhalter funktionieren auch, wenn Sie TrustedHosts nicht jedes Mal einen neuen Host hinzufügen möchten.

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

Wir speichern das Passwort verschlüsselt in einer Datei:

Dies ist für die Automatisierung nützlich und erleichtert das Ausführen von Skripten über den Scheduler erheblich. Das Kennwort wird jedoch in einer sicheren Form gespeichert.

Wenn Sie Skripts von einem angemeldeten Benutzer ausführen, werden die Credits des Benutzers verwendet.

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

Das verschlüsselte Passwort entnehmen wir der Datei:

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

Das Gleiche kann mit Anmeldeinformationen gemacht werden. Ersetzen Sie Read-Host durch Get-Credential.

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

Wir bekommen das Datum des letzten Bootens des Betriebssystems.

 (gcim win32_operatingsystem).LastBootUpTime 

Auf die gleiche Weise erhalten wir auch Betriebszeit.

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

Wir erhalten eine Liste der installierten Programme:

Es sind Programme, keine Komponenten:

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


Wir erhalten eine Liste der Laufwerke, einschließlich der Netzwerklaufwerke und des freien Speicherplatzes auf ihnen

 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]}} 

Wir stoppen den Prozess mit seinem Namen.

In diesem Beispiel stoppen wir Chrome. Wildcard eignet sich auch, wenn Sie alles vervollständigen möchten.

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

Kopieren Sie die Einstellungen für den Ordnerzugriff in untergeordnete Ordner

Dies ist nützlich, wenn Sie den Ordner und alle Unterordner der Benutzergruppe oder des Benutzers auswählen oder ihm das Recht geben möchten, ihn zu verwenden. Der Befehl rekursiv von unten nach oben, Lese- und Schreibrechte.

Kopieren Sie die ACL aus dem Ordner:

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

Fügen Sie die ACL für alle Dateien und Unterordner ein:

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

Nützliche Skripte:


Hier beginnt der schlimmste Spaß. Wenn Sie eine Bestandsaufnahme durchführen müssen, ist es sehr nützlich, einen Blick darauf zu werfen. Befinden sich Ihre Computer nicht in AD, wird das Skript etwas komplizierter, es muss über eine vorkompilierte Datei iteriert werden, und Kennwörter müssen aus der Datei oder über Get-Credential abgerufen werden. Der Unterschied:

C AD:

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

Ohne AD:

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

Wir erhalten das Datum des letzten Starts jedes Computers in AD:

 $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}} } } 

Wir bekommen alle installierten Programme auf allen AD Computern:

 $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    } } 

Dasselbe kann für die Komponenten erhalten werden, indem Invoke-Command ersetzt wird:

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

Wir bekommen Computer, auf denen der Prozess läuft, den wir brauchen:

Wenn Sie vergessen haben, auf welchem ​​Computer dieses oder jenes Programm ausgeführt wird, können Sie es auf diese Weise abrufen. Betrachten Sie ein Browser-Beispiel:

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

Das Beenden eines Browsers kann so einfach sein wie das Abrufen eines Prozesses:

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

Wir bekommen Computer, auf denen ein bestimmtes Programm installiert ist:

Insgeheim in diesem Fall Java. Es wird Ihnen bei der Inventarisierung helfen, Sie können die Namen der Computer sehen, auf denen es installiert wurde.

 $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    } } 

Wenn Sie Vorschläge haben, fügen wir diese gerne zu diesem Artikel hinzu. Wir hoffen, diese Beispiele haben Ihnen geholfen.

Wir bieten einen aktualisierten UltraLite Windows VDS- Tarif für 99 Rubel mit installiertem Windows Server 2019 Core an.

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


All Articles