Sommaire
ToggleContexte
Dans le cadre d’un projet, j’ai du gérer un certain nombre de comptes ordinateurs qui devaient être déplacés et désactivés. Problème, cette action ne pouvait, de par le nombre de machines concernées, être effectuée machine par machine.
J’ai donc créé un script qui a pour but de repérer les comptes ordinateurs (non-serveurs) qui sont inactifs depuis une durée déterminée. Il les inscrit ensuite dans un fichier texte qui va être généré dans le répertoire “$CsvPath/MachinesEnabled.csv” afin de pouvoir faire un retour arrière en cas de problème.
Ce script doit être exécuté depuis une session (Powershell ou RDP) sur un serveur ayant les outils d’administration active directory, les droits administrateurs et le module “activedirectory” doit y être importé.
Descriptif
Descriptif des arguments de la fonction Clean-AdComputer :
- CsvPath : répertoire dans lequel sera stocké le listing des machines en .csv
- BeforeDays : Nombre de jours avant lesquelles vous souhaitez répertorier, déplacer ou désactiver les machines
- OUCheck : OU (Unité d’organisation) dans laquelle vous souhaitez récupérer la liste de machines
- OUTarget : OU (Unité d’organisation) dans laquelle vous souhaitez déplacer les machines
- Desactivate : Argument à ajouter si vous souhaitez désactiver les machines
- Move : Argument à ajouter si vous souhaitez déplacer vos machines vers l’OUTarget.
Script
## Script Desactivation et déplacement de machines ##
## 23/03/2017 ## ## MOULHERAT Romain ##
## Société Metsys ##
Function Clean-AdComputeurs{
Param (
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType 'Container'})]
[string]
$CsvPath
,
[Parameter(Mandatory=$true)]
[ValidateRange(60,999)]
[int]
$BeforeDays
,
[Parameter(Mandatory=$true)]
[string]
$OUCheck
,
[Parameter(Mandatory=$false)]
[string]
$OUTarget
,
[Parameter(Mandatory=$false)]
[switch]
$Desactivate
,
[Parameter(Mandatory=$false)]
[switch]
$Move
)
Process
{
## Création du répertoire de stockage du listing machines (à utiliser en pour retour arrière) ##
mkdir $CsvPath
## Période à partir de laquelle vous souhaitez déplacer ou désactiver les machines ##
$Date = (Get-Date).AddDays(-$BeforeDays)
$Path = "$CsvPath\MachinesEnabled.csv"
## Récuperation du listing ##
$Computers = Get-ADComputer -Properties
lastLogonDate,OperatingSystem,Enabled -SearchBase $OUCheck -Filter {(LastLogonDate -lt $Date) -and ( OperatingSystem -notlike "*Serve*" ) -And ( Enabled -eq $True ) } | Ft Name -HideTableHeaders $Computers | Out-File -FilePath $Path -Encoding ascii $CountComputers = ($Computers).count
Write-Host "La liste des machines est dans $Path, il peut etre réutilisée afin de faire un roll-back et contient $CountComputers Machine(s)"
## Si l'argument -Move a été indiqué on execute le deplacement des machines ##
If ($Move)
{
Get-ADComputer -Properties lastLogonDate,OperatingSystem,Enabled -SearchBase $OUCheck -Filter {(LastLogonDate -lt $Date) -and ( OperatingSystem -notlike "*Serve*" ) -And ( Enabled -eq $True ) } | Move-ADObject -TargetPath $OUTarget
Write-Host " Les machines suivantes ont été déplacé : $Computers "
}
Else
{
Write-Host "Pas de désactivation de manchines" }
## Si l'argument -Desactivate à été indiqué on désactive les comptes ordinateurs ##
If ($Desactivate)
{
Get-ADComputer -Properties lastLogonDate,OperatingSystem,Enabled -SearchBase $OUCheck -Filter {(LastLogonDate -lt $Date) -and ( OperatingSystem -notlike "*Serve*" ) -And ( Enabled -eq $True ) } | Set-ADComputer -Enabled $false
Write-Host " Les comptes des machines suivantes ont été déplacé : $Computers "
}
Else
{
Write-Host "Pas de deplacement des machines"
}
}
}