Essayer d'automatiser des processus à l'aide de Powershell


Cet article expliquera pourquoi nous aimons tous Powershell avec quelques exemples de travail. Tout cela sera utile lors de l'inventaire, de la recherche d'un ordinateur spécifique et d'autres sujets. Powershell est équipé d'applets de commande pratiques et accrocheuses, la saisie semi-automatique de tout et des noms intuitifs en font probablement la langue la plus facile à apprendre.

Dans ce guide, nous allons examiner certaines des équipes sympas de l'avis de l'auteur et expliquer pourquoi c'est cool. Commençons par les extraits.

Extraits utiles:


Nous apportons l'ordinateur à TrustedHosts

Utile lors de la connexion au serveur via WinRm. La commande écrasera la valeur précédente, soyez prudent, ajoutez ip ou des noms d'hôtes séparés par des virgules. Si tous vos hôtes sont en AD, vous n'avez pas besoin de toucher ce fichier.

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

Le caractère générique fonctionne également si vous ne souhaitez pas ajouter à chaque fois un nouvel hôte à TrustedHosts.

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

Nous stockons le mot de passe sous forme cryptée dans un fichier:

Il est utile pour l'automatisation, il facilite grandement la vie lors de l'exécution de scripts à partir du planificateur, mais le mot de passe est stocké sous une forme sûre.

Si vous exécutez des scripts à partir d'un utilisateur connecté, les crédits de l'utilisateur seront utilisés.

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

Nous prenons le mot de passe crypté du fichier:

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

La même chose peut être faite avec les informations d'identification, remplacez Read-Host par Get-Credential.

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

Nous obtenons la date du dernier démarrage de l'OS.

 (gcim win32_operatingsystem).LastBootUpTime 

De la même manière, nous obtenons également une disponibilité.

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

Nous obtenons une liste des programmes installés:

Ce sont des programmes, pas des composants:

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


Nous obtenons une liste de lecteurs, y compris les lecteurs réseau et l'espace libre sur eux

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

Nous arrêtons le processus par son nom.

Dans cet exemple, nous arrêtons Chrome. Le caractère générique convient également si vous souhaitez tout terminer.

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

Copier les paramètres d'accès aux dossiers dans des dossiers enfants

Il est utile si vous souhaitez sélectionner ou donner le droit d'utiliser le dossier et tous les sous-dossiers du groupe d'utilisateurs ou de l'utilisateur. La commande récursivement, de bas en haut, permet de lire et d'écrire des autorisations.

Copiez l'ACL du dossier:

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

Insérez l'ACL sur tous les fichiers et sous-dossiers:

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

Scripts utiles:


C'est là que commence le pire plaisir. Si vous avez besoin de faire un inventaire, il sera très utile d'y jeter un coup d'œil. Si vos ordinateurs ne sont pas dans AD, le script deviendra un peu plus compliqué, il devra être itéré sur un fichier précompilé et les mots de passe devront être extraits du fichier ou via Get-Credential. Toute la différence:

C AD:

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

Sans AD:

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

Nous obtenons la disponibilité la date du dernier démarrage de chacun des ordinateurs dans 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}} } } 

Nous obtenons tous les programmes installés sur tous les ordinateurs 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    } } 

La même chose peut être obtenue pour les composants, en remplaçant Invoke-Command:

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

Nous obtenons des ordinateurs sur lesquels s'exécute le processus dont nous avons besoin:

Si vous avez oublié sur quel ordinateur tel ou tel programme s'exécute, vous pouvez l'obtenir de cette manière. Prenons un exemple de navigateur:

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

Tuer un navigateur peut être aussi simple que d'obtenir un processus:

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

Nous obtenons des ordinateurs sur lesquels un programme spécifique est installé:

Secrètement dans ce cas Java. Cela vous aidera lors de l'inventaire, vous pouvez voir les noms des ordinateurs sur lesquels il a été installé.

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

Si vous avez des suggestions, nous serons heureux de les ajouter à cet article. Nous espérons que ces exemples vous ont été utiles.

Nous proposons un tarif UltraLite Windows VDS mis à jour pour 99 roubles avec Windows Server 2019 Core installé.

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


All Articles