[PS] Vérifier et modifier la passerelle d’un poste client

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.

[PS] Listing de la taille des répertoires utilisateurs

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.

OpenVPN avec Vyatta

25/06/2011 4 commentaires

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…

Rapid Spanning Tree Protocol sur switch ProCurve

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…

[PS] Remote Shutdown

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.