Je cherchais le moyen de vérifier et de modifier la passerelle par défaut de certain poste client afin de les faire pointer sur une nouvelle passerelle, le tout sans intervenir physiquement sur chaque machine et rendre cette modification transparente vis à vis de l’utilisateur.
Encore une fois Powershell à bien rempli sa mission.
Voici le script :
<#
CheckGateway.ps1
V2 - 22/11/2011
(Auteur: Damien BENOIT)
#>
# Récupération de la date/heure pour le log
$Date = Get-Date -uformat "%d-%m-%Y_%Hh%Mm"
$DateLog = Get-Date -uformat "%d-%m-%Y %Hh %Mm"
# Variables globales ##############################
$OU = "OU=xx,DC=xx,DC=xx"
$GoodGateway = "172.16.xx.xx"
$LogPath = "D:\Logs_scripts\Check_Gateway_$Date.log"
###################################################
# Formatage du fichier de log
Write "# Vérification du $DateLog #" > $LogPath
Write "######################################" >> $LogPath
Write " " >> $LogPath
# Recheche des objets (ordinateurs) dans l'OU et les sous-ou
$Objet = "computer"
$objDomaine = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$OU")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomaine,"(objectCategory=$Objet)",@('name'))
$ComputerList = $objSearcher.FindAll() | %{$_.properties.name}
# Somme totale des objets dans l'OU et les sous-ou
$Total=$ComputerList.count
Foreach ($PC IN $ComputerList) {
$tot++
# Barre de progression
Write-Progress -Activity "Recheche en cours..." -CurrentOperation "Ordinateur: $PC" -Status "Effectué: $tot/$Total" -PercentComplete ($tot/$Total*100)
Write-Host -ForegroundColor Yellow "Test de l'ordinateur $PC en cours.`r"
# Test si l'ordinateur est allumé
$PingResult = Get-WmiObject Win32_PingStatus -f "Address='$PC'"
$StatusCode = $PingResult.statuscode
# Si le statuscode = 0 alors l'ordinateur est allumé
IF($StatusCode -eq 0) {
# Conversion de l'adresse IP en chaine du type 172.16.x.x
$IPcible = $PingResult.IPV4Address.IPAddressToString
Write-Host -ForegroundColor Green "`t$PC (IP: $IPcible) online.`r"
# Récupération de la passerelle par défaut de l'ordinateur
$GetDefaultGateway = Get-WmiObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName "$PC" -Filter "IPEnabled = $true"
$Gateway = $GetDefaultGateway.DefaultIPGateway
# Si la mauvaise passerelle est trouvé, changement + envoi dans le fichier de log
IF($Gateway -ne $GoodGateway) {
$GetComputerName = Get-WmiObject -Class "Win32_ComputerSystem" -ComputerName "$PC"
$ComputerName = $GetComputerName.Name
$ComputerDomain = $GetComputerName.Domain
$fqdn = $ComputerName+"."+$ComputerDomain
Write-Host -ForegroundColor Red "`tL'ordinateur: $fqdn possède la passerelle $Gateway"
# Modification automatique de la passerelle
$GetDefaultGateway.SetGateways("$GoodGateway")
# Vérification de la nouvelle passerelle
$GetNewGateway = Get-WmiObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName "$PC" -Filter "IPEnabled = $true"
$NewGateway = $GetNewGateway.DefaultIPGateway
Write-Host -ForegroundColor Green "`tLa nouvelle passerelle est: $NewGateway"
# Ecriture dans le fichier de log
Write "L'ordinateur: $fqdn possède la passerelle $Gateway" >> $LogPath
Write "La nouvelle passerelle de $fqdn est: $NewGateway" >> $LogPath
}
}
}
Voici un aperçu graphique.

Extrait du fichier de log généré :
# Vérification du 23-11-2011 10h 35m #
######################################
L’ordinateur: xxxx.xxx.xx possède la passerelle 172.16.xxx.xxx
La nouvelle passerelle de xxxx.xxx.xx est: 172.16.xxx.xxx
Vous pouvez le télécharger ici.
Souhaitant avoir un aperçu rapide de la taille des dossiers personnels de mes utilisateurs sans avoir activé les quotas, j’ai résolu mon problème grâce à Powershell !
Voici le script :
<#
CheckDirectorySize.ps1
V1 - 19/10/2011
(Auteur: Damien BENOIT)
#>
Clear
$folderPath = Read-Host "Quel est le chemin ? (Exemple D:\perso)"
Clear
$maxsize = Read-Host "Quel est la taille à ne pas dépasser (en MB) ? (Exemple 500)"
Clear
# Test de l'existence du répertoire
$testpath = Test-Path $folderpath
if(!($testpath)){
Write-Host -ForegroundColor Red "$folderpath n'existe pas !"
Break
}
# Chargement du module Active Directory
Import-Module ActiveDirectory
# Récupération des dossiers non vides
$size = Get-ChildItem $folderpath | Where-Object {$_.PsIsContainer -eq $True}
# Calcul du nombre de dossier non vide
$total=$size.count
# Boucle de recherche/calcul
Foreach($elements IN $size) {
$tot++
# Barre de progression
Write-Progress -activity "Progression" -status "Effectué (%)" -percentcomplete ($tot/$total*100)
$folder = $folderpath + "\" + $elements.Name
$colItems = (Get-ChildItem $folder -Recurse | Measure-Object -property length -sum)
$colItemsSum = [float]($colItems.sum/1MB)
# Recherche de l'utilisateur
$UserSearch = Get-ADUser -Filter {SamAccountName -like $elements}
$UserName = $UserSearch.Name
# Calcul de l'exces
$calcul = $colItemsSum - $maxsize
if($colItemsSum -ge $maxsize) {
Write-Host -ForegroundColor Red "La taille du répertoire de $UserName ($elements) excede les $maxsize MB de $calcul MB, (TOTAL: $colItemsSum MB).`r"
} Else {
Write-Host -ForegroundColor Green "La taille du répertoire de $UserName ($elements) est de $colItemsSum MB.`r"
}
}
Voici un aperçu avec une taille limite fixée à 500MB.

Vous pouvez le télécharger ici.
J’ai découvert il y plusieurs mois Vyatta Core, une solution d’appliance routeur/vpn/firewall open source, le téléchargement est disponible ici.
Il est très complet c’est pourquoi je développerais mon utilisation sommaire du routeur ainsi que la mise en place d’une liaison client-to-site OpenVPN.
Voici le schéma du but à atteindre :

Lire la suite…
Ce test à été réalisé avec 3 switch HP ProCurve 2626 disposant de 26 ports (24 ports 100Mbits/s, 2 ports 1 000 Mbit/s).
Situation actuelle :

Lire la suite…
Aujourd’hui c’est le jour du script Green IT, lorsque l’ont oubli d’éteindre son ordinateur avant de quitter le bureau, voici un script permettant d’éteindre les ordinateurs contenu dans une OU de l’Active Directory.
A lancer en soirée via une tâche planifié !
# Shutdown.ps1 #
# V1 - 22/06/2011 #
#(Auteur: Damien BENOIT)
$Objet = "computer"
$objDomaine = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=monOU,DC=monDomaine,DC=local")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomaine,"(objectCategory=$Objet)",@('name'))
$requete = $objSearcher.FindAll() | %{$_.properties.name} # Création du fichier de log
Start-Transcript -path C:\shutdown.log
Foreach($PC IN $requete) {
# Test si l'ordinateur est allumé
$pingresult = Get-WmiObject Win32_PingStatus -f "Address='$PC'"
$StatusCode = $pingresult.statuscode
# Si le statuscode = 0 alors l'ordinateur est allumé
If($StatusCode -eq 0) {
$IPcible = $pingresult.IPV4Address.IPAddressToString
Write-Host -ForegroundColor Red -BackgroundColor Black "L'ordinateur $PC (IP: $IPcible) va s'éteindre...`r"
# Exctinction de l'ordinateur
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName $IPcible).Win32Shutdown(1)
} Else {
Write-host -ForegroundColor Green -BackgroundColor Black "L'ordinateur $PC est éteint.`r"
}
}
# Arret du log
Stop-Transcript
Vous pouvez le télécharger ici.