Windows PowerShell Scripting

Hello, je partage avec vous quelques commandes/scripts PowerShell que j’ai trouvé un peu partout pour optimiser un peu votre temps de travail. N’hésitez pas à partager avec moi vos scripts, vos commandes, vos astuces…etc, en commentaire.

Quelques liens sympa :PowerShell By Pixelabs

Remarque : merci de tester les scripts dans un environnement de test avant de passer à la PROD. 

Windows PowerShell Version

Je suis sous Windows 10 en version 5.

Pour afficher la version PowerShell :

PS C:\Users\pixelabs#> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.15063.1387
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.1387
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Afficher la stratégie d’exécution :

PS C:\Users\pixelabs#> Get-ExecutionPolicy
Unrestricted
PS C:\Users\pixelabs>

Ou encore :

PS C:\Users\pixelabs#> Get-PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      15063  1387


PS C:\Users\pixelabs>

Pour autoriser l’exécution des scripts :

PS C:\Users\pixelabs#> Set-ExecutionPolicy remotesigned

ou :

PS C:\Users\pixelabs#> Set-ExecutionPolicy unrestricted

PowerShell > Windows Update

J’ai bricolé ce script en rassemblant des morceaux un peu partout. Il permet de vérifier si vos serveurs ont besoin d’un reboot après une mise à jour. Il peut ainsi redémarrer tous les serveurs ou les arrêter.

Télécharger : Check Update, Reboot, Shutdown

Avant de lancer le script, vous devez ajouter les informations de votre domaine. Ligne 86 :

$computernames = Get-ADComputer -SearchBase 'OU=SERVEURS,DC=PIXELABS,DC=LAN' -Filter '*' | Select -Exp Name | Sort-Object Name
  • OU = unité d’organisation ou se trouve vos serveurs.
  • DC = domaine AD. Exemple ici : pixelabs.lan

Sauvegarder et lancer le script :

Check Update PowerShell

  • [0] = il vérifie si un serveur à besoin de redémarrer
  • [1] = affiche la liste des serveurs trouvés
  • [2] = il est possible d’éditer la liste des serveurs pour en rajouter/supprimer
  • [3] = permet de vérifier l’état des serveurs (ping)
  • [4] = pour arrêter ou redémarrer les serveurs présents dans la liste

List serveur

Ping Servers PowerShell

PowerShell > PS2EXE

Permet de convertir un script PowerShell en fichier exécutable (.exe). Nous allons convertir le script ci-dessus (Check Update, Reboot, Shutdown).

L’ensemble des fichiers doivent être dans le même dossier. Placez donc vos scripts/icônes dans le dossier PS2EXE-GUI :

  • Le script en question
  • Une icône au format ICO (pixelabs.ico – 30x30px) l’icône c’est pour le fun bien entendu 😀

Ouvrir la console PowerShell et allez dans le répertoire PS2EXE-GUI. 


Voici une petite astuce pour réaliser cette action rapidos :

  • Ouvrir le répertoire PS2EXE-GUI
  • Dans la barre d’adresse, effacez l’arborescence : C:\Users\pixelabs\Desktop\PS2GUI-GUI

Windows PowerShell Directory Location

Windows PowerShell Directory

  • Tapez à la place : powershell.exe et Entrée
  • Pour CMD, tapez simplement : cmd et Entrée
  • La console PowerShell/CMD s’affiche et vous y êtes déjà dans le dossier PS2EXE-GUI. C’est cool hein…Windows nous cache des choses 🙂

Pour générer le fichier exécutable, tapez la commande suivante :

PS C:\Users\pixelabs\Desktop\PS2EXE-GUI#> .\ps2exe.ps1 .\check_update.ps1 check_update.exe -iconFile 'pixelabs.ico' -version '1.0' -noConfigfile
PS2EXE-GUI v0.5.0.13 by Ingo Karstein, reworked and GUI support by Markus Scholtes

You are using PowerShell 4.0 or above.

Reading input file C:\Users\pixelabs\Desktop\PS2EXE-GUI\check_update.ps1

Compiling file...

Output file C:\Users\pixelabs\Desktop\PS2EXE-GUI\check_update.exe written
PS C:\Users\pixelabs\Desktop\PS2EXE-GUI>

Le fichier EXE est généré dans le même dossier :

PowerShell Scripts To EXE File

Consulter le fichier Usage.txt pour voir d’autres paramètres.

PowerShell > Search By MAC

Chercher une réservation DHCP par adresse MAC :

PS C:\Users\pixelabs#> Invoke-Command -ComputerName serv-dhcp01,serv-dhcp02 -ScriptBlock {Get-DhcpServerv4Scope | Get-DhcpServerv4Lease -EA SilentlyContinue -ClientId "30055C576350"}

-ClientId “30055C576350“} = adresse MAC

PowerShell > Réservation DHCP

Ajouter une réservation DHCP. Exemple pour une réservation d’imprimante. Ce qu’il nous faut :

  • Serveurs DHCP
  • L’étendue DHCP (-ScopeId)
  • Nom de l’imprimante
  • Adresse IP disponible
  • Adresse MAC de l’imprimante  (-ClientId)
  • Description
PS C:\Users\pixelabs#> Invoke-Command -ComputerName serv-dhcp01,serv-dhcp02 -ScriptBlock {Add-DhcpServerv4Reservation -ScopeId 172.16.0.0 -Name IMP-CANON -IPAddress 172.16.1.11 -Description "CANON" -ClientId "80ce62594653"}

Pour supprimer une réservation :

  • Serveur DHCP
  • L’étendue DHCP (-ScopeId)
  • Adresse MAC de l’imprimante  (-ClientId)
PS C:\Users\pixelabs#> Invoke-Command -ComputerName serv-dhcp01,serv-dhcp02 -ScriptBlock {Remove-DhcpServerv4Reservation -ScopeId 172.16.0.0 -ClientId "80ce62594653"}

PowerShell > Ajout entrée DNS

Ajouter une entrée DNS de type AAA :

PS C:\Users\pixelabs#> Invoke-Command -ComputerName serv-dns01 -ScriptBlock {Add-DnsServerResourceRecordA -ZoneName pixelabs.lan -AllowUpdateAny -CreatePtr -Name IMP-CANON -IPv4Address 172.16.1.11}

PowerShell > Update VM-Tools Linux

Permet de mettre à jour les VMWare Tools automatiquement sur toutes vos VMs Linux sans redémarrer les serveurs et une fois terminé, une notification peut être envoyée sur votre boite mail.

Télécharger : Update VMWare Tools PowerShell Script

  • Vous devez installer VMware vSphere PowerCLI
  • Ligne 2 : ajouter l’adresse IP de votre vCenter
  • Pour les notifications :
    • Ligne 39 : votre adresse mail
    • Ligne 42 : votre serveur SMTP
#Enter your vCenter Host below
$vcenter = "serv-vcenter"
################################
 
#Load the VMware Powershell Module
Add-PSsnapin VMware.VimAutomation.Core
 
#Connect to the vCenter server defined above. Ignore certificate errors
Connect-VIServer $vcenter -wa 0
 
#Get the folder name from the user. Update all VM's if blank
$folder = Read-Host "Quel dossier souhaitez-vous mettre à jour ? (laisser vide pour mettre à jour toutes les VMs)"
 
#Check if the user entered a folder. If a folder was provided return only the VM's for that folder
If($folder)
{
Write-Host "Mise à jour des VMs dans $folder"
#Get all VM's for a specified folder and return only their names
$virtualmachines = Get-Folder $folder | Get-VM | select -expandproperty Name
}
 
#Else if the user left the folder blank, get all VM's
Else
{
Write-Host "Mise à jour de toutes VM's"
#Get all VM's in the vCenter and return only their names
$virtualmachines = Get-VM | select -expandproperty Name
}
 
#Perform the following for each VM returned
ForEach ($vm in $virtualmachines)
{
Write-Host "Updating VMware Tools on $VM"
#Update VMware tools without rebooting the VM
Update-Tools $vm -NoReboot
}
#Send out an email with the names  
$emailFrom = "VMware vCenter"  
$emailTo = "pixelabs@pixelabs.fr"  
$subject = "VMWare Tools Updated Success ! :D"
$message = "Mise à jour des VMTools OK ! "  
$smtpServer = "pixelabs.smtp.fr"  
$smtp = new-object Net.Mail.SmtpClient($smtpServer)  
$smtp.Send($emailFrom, $emailTo, $subject, $message, $Report)

PowerShell > Update VM-Tools Windows

Permet de mettre à jour les VMWare Tools automatiquement sur toutes vos VMs Windows sans redémarrer les serveurs.

  • Vous devez installer VMware vSphere PowerCLI
  • VMware vCenter IP‘ = adresse IP de votre serveur VMWare vCenter.
Get-VM -Location 'VMware vCenter IP' | Where-Object { $_.ExtensionData.Guest.ToolsVersionStatus -eq 'guestToolsNeedUpgrade' -and $_.PowerState -like 'PoweredOn' } | Get-VMGuest | Where-Object { $_.GuestFamily -like 'WindowsGuest'} | Update-Tools -NoReboot -RunAsync

PowerShell > Export File d’impression

Ce script permet d’exporter toutes vos files d’impressions (imprimantes) et les stocker dans un joli tableau Excel automatiquement :

  • Un fichier texte avec tous vos serveurs d’impression (1 serveur par ligne)
  • Microsoft Excel doit être installé

Pour le respect des droits d’auteur, voici le script original :

Télécharger : Get Printers PowerShell Script

Le script ne renvoie pas l’adresse IP de l’imprimante, mais le nom DNS. J’ai donc apporté une petite modification pour avoir l’adresse IP :

Télécharger : Exporter Imprimante PowerShell Script

Lancez simplement le script :

.\Get-Printer-pixelabs.ps1

Excel se lancement automatiquement et vous devez patienter :

Export All Printer PowerShell Script

PowerShell > Windows10Debloater

Supprimer toutes les applications pré-installés sous Windows 10. Windows PowerShell doit être installé. Disponible ici : Sycnex/Windows10Debloater

Liste des apps :

3DBuilder, Appconnector, Bing Finance, Bing News, Bing Sports, Bing Weather, Fresh Paint, Get started, Microsoft Office Hub, Microsoft Solitaire Collection, Microsoft Sticky Notes, OneNote, OneConnect, People, Skype for Desktop, Alarms, Camera, Maps, Phone, SoundRecorder, XboxApp, Zune Music, Zune Video, Windows communications apps, Minecraft, PowerBI, Network Speed Test, Phone, Messaging, Office Sway, OneConnect, Windows Feedback Hub, Bing Food And Drink, Bing Travel, Bing Health And Fitness, Windows Reading List, Twitter, Pandora, Flipboard, Shazam, CandyCrush, CandyCrushSoda, King apps, iHeartRadio, Netflix, DrawboardPDF, PicsArt-PhotoStudio, FarmVille 2 Country Escape, TuneInRadio, Asphalt8, NYT Crossword, CyberLink MediaSuite Essentials, Facebook, Royal Revolt 2, Caesars Slots Free Casino, March of Empires, Phototastic Collage, Autodesk SketchBook, Duolingo, EclipseManager, ActiproSoftware, BioEnrollment, Windows Feedback, Xbox Game CallableUI, Xbox Identity Provider, and ContactSupport.

Télécharger : Windows 10 Debloater

Lancer le script  Windows10Debloater.ps1. Cliquez sur “Oui” puis confirmer encore en cliquant sur “Oui” :

Delete Windows 10 Apps

Remove Windows 10 Apps

La suppression de ces apps merdique commence automatiquement :

Remove Windows 10 Apps Using PowerShell

PowerShell > Ajouter un User AD

Créer un utilisateur AD rapidement. Ouvrir le script avec Windows PowerShell ISE :

Modifier la ligne selon votre configuration : $Path = "OU=Users,DC=PIXELABS,DC=LAN"

Import-Module ActiveDirectory
$NewUser = Read-Host "Nom de session"
$PrincipalName = Read-Host "Nom de session principal"
$FirstName = Read-Host "votre nom"
$LastName = Read-Host "votre prénom"
$NewName = "$FirstName $LastName"
$Path = "OU=Centreon,DC=PIXELABS,DC=LAN"

New-ADUser -SamAccountName $NewUser -UserPrincipalName $PrincipalName -Name $NewName -GivenName $FirstName -Surname $LastName -Path $Path -AccountPassword (Read-Host "Password" -AsSecureString) -PasswordNeverExpires $true -Enabled $true

Ajouter Utilisateur via PowerShell

PowerShell > Export Server List

Exporter la liste de serveurs AD en filtrant par nom :

Remarque : la commande doit être exécutée sur un contrôleur de domaine.

PS C:\WINDOWS\system32> Get-ADComputer -Filter 'Name -Like "PC-PIX*"' -Property IPv4Address | FT DNSHostName,IPv4Address -A

DNSHostName               IPv4Address
-----------               -----------
PC-PIXEL1.pixelabs.lan 172.16.4.124
PC-PIXEL2.pixelabs.lan 172.16.2.124
PC-PIXEL3.pixelabs.lan 172.16.3.124
PC-PIXEL4.pixelabs.lan 172.16.5.124
...

PowerShell > Redémarrer un service (multiple serveurs)

Redémarrer un service Windows depuis une liste de serveur :

Exemple : Redémarrage du servie SNMP.

$servers = Get-Content “C:\list-servers.txt”
Invoke-Command -ComputerName $servers {Restart-Service SNMP}

PowerShell >

 

 
Besoin d’aide ? des questions ?

Venez sur le forum
logo Forum Pixelabs
***********
La rédaction de cette documentation demande beaucoup de temps, de motivation, mais surtout beaucoup de café 🙂

Vous aimez pixelabs ?

Offrez moi un petit café en cliquant sur la tasse ci-dessous.
pixelans_donation
Merci !