APSQL

Activer l'audit à l'aide de PowerShell

Parmi les différentes possibilités d'audit, il est particulièrement intéressant de suivre les échecs de connexion. Dans le cas où l'on exploite une seule instance SQL Server, il est facile d'effectuer manuellement cette configuration. Par contre lorsque l'on doit réaliser cette opération sur plusieurs instances il convient de travailler de façon plus automatique, par exemple en stockant dans un fichier les noms des différentes instances SQL Server puis en utilisant un script qui va réaliser l'activation de l'audit sur les instances dont le nom est présent dans ce fichier.

Pour réaliser ce type de tâche le powershell représente l'outil idéal. En effet il est possible de s'appuyer sur la bibliothèque SMO et donc l'objet server pour appliquer la modification demandée.

Le script présenté ci-dessous réalise ce travail et utilise le fichier instancesSQL.txt pour connaitre le nom des instances à configurer. Dans ce fichier les commentaires seront définis en mettant le caractère # dans la première colonne de la ligne à mettre en commentaire.

Enfin pour l'écriture et la mise au point de ce type de scripts, je vous recommande d'utiliser Windows PowerShell ISE comme illustré ci-dessous :

Editeur ISE de PowerShell

Enfin voici le script qui permet d'activer cet audit de connexion :

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.Sqlserver.SMO')|out-null
cls
$InstanceList="C:\powershell\SQLInstance.txt"
if ($InstanceList -eq ""){
    Write-Host "No List specified"
    exit
} else {
    if ((Test-Path $InstanceList) -eq $false){
        Write-Host "Invalid audit path specified : $InstanceList"
        exit
    } else {
        Write-Host "Using Audit List : $InstanceList"
        $Instances = Get-Content $InstanceList
    }
}
$Instances=$Instances | where {$_ -notmatch "#"}
foreach($Instance in $Instances){
    trap [System.Exception]{
        Write-Host ("In Instance Loop trapped"+ $_.Exception.GetType().Name+" For $InstanceName");
        continue;
    }
    $smosvr= New-Object('Microsoft.SqlServer.Management.Smo.Server')$Instance
    $smosvr.set_AuditLevel([Microsoft.Sqlserver.Management.Smo.AuditLevel]::failure);
    $smosvr.Alter();
}