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
Bonjour Etienne,
La méthode est marqué dans le billet au début.
« Le script utilise un fichier nommé sqlserver.txt dans lequel il suffit de mettre les noms des serveurs SQL à auditer »
++
Dans ton script on ne voit pas comment tu récupères les infos de ton fichier sqlserver.txt pour construire la chaine de connexion !?
Je me suis inspiré de ton script pour écrire ceci :
http://blog.developpez.com/zinzineti/p9078/powershell-sqlserver/automatiser-la-collecte-des-caracterique/#more9078
Merci
A+
Etienne ZINZINDOHOUE