SQL Server PowerShell : Comment récupérer rapidement les informations générales d’une liste de serveurs

Il y a peu de temps j’ai dû effectué un audit sur un ensemble de serveurs SQL. Autant vous dire que j’ai essayé d’optimiser certaines tâches comme la récupération de certaines données générales du serveur comme les processeurs, la mémoire, les disques et le système d’exploitation. Voici un script Powershell qui permet de récupérer ces informations rapidement !!


Le script utilise un fichier nommé sqlserver.txt dans lequel il suffit de mettre les noms des serveurs SQL à auditer. Assurer vous également que le compte utilisé par le script ait les droits nécessaires pour interroger du cmdlet sur le serveur concerné. Ce script a été testé sur Windows 2003 Server, Windows Server 2008 et Windows Server 2008 R2.

#################################
# @author = Mikedavem           #
# @Description =                #
# Récupération d’informations   #
# serveurs (CPU, mémoire,       #
# disques, OS …)              #
#################################

$computername = « computername »;
$login = « domain\administrateur »
$pwd = convertto-securestring « pasword » -asplaintext -force;
$servers = get-content « sql_server.txt »

# Définition du crédential
$credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $login,$pwd -ErrorAction « silentlycontinue »;

foreach($server in $servers)
{
$operatingSystem = get-wmiobject win32_OperatingSystem -computername $server -credential $credential
Write-Host $operatingSystem.CSName
Write-Host $operatingSystem.Caption
Write-Host « ——— »
Write-Host « Disques :  »

$Disk = get-WmiObject Win32_LogicalDisk -computername $server -credential $credential | Where {$_.Name -ne « A: » -and $_.DriveType -eq « 3 »}

foreach ( $disque in $Disk ) {
    # calul de la taille en Giga octet
    $taille = $disque.freespace / (1024*1024*1024)
    $taille = [math]::round($taille, 1) # Arrondi la taille à la décimale
    $size = $disque.size / (1024*1024*1024)
    $size = [math]::round($size, 1)

    Write-host « Drive= » $disque.Name « Size= » $size « Go FreeSpace= » $taille « Go »
}

Write-Host « ——— »
Write-Host « CPU :  »

$processor = get-wmiobject Win32_processor -computername $server -credential $credential
foreach ($proc in $processor)
{
  Write-Host « ID= » $proc.DeviceID « Proc= » $proc.Name « , Speed= »$proc.CurrentClockSpeed »MHz Arch= » -nonewline;
  Switch($proc.Architecture)
             {
              0{« x86″}
              1{« MIPS »}
              2{« Alpha »}
              3{« PowerPC »}
              6{« Intel Itanium IPF »}
              9{« x64″}
             }
}

Write-Host « ——— »
Write-Host « Memory :  »
$memory = get-wmiobject Win32_ComputerSystem -computername $server -credential $credential
foreach ($mem in $memory)
{
  $tailleRAM = [math]::round($mem.TotalPhysicalMemory / (1024 * 1024 * 1024), 1)
  Write-Host « Total of memory = » $tailleRAM « Go »;
}
Write-Host « ——— »
Write-Host «  »
}

Bon audit !!

David BARBARIN (Mikedavem)
Elève ingénieur CNAM

2 réflexions au sujet de « SQL Server PowerShell : Comment récupérer rapidement les informations générales d’une liste de serveurs »

Laisser un commentaire