PS sauvegarder dans 2 repertoires différents

adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 26 nov. 2023 à 16:30
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 18 déc. 2023 à 01:10

bonjour

je cherche un moyen d'ajouter un deuxieme emplacment de sauvegarde de mes GPO sur un serveur nas (\\srv-nas\gpo_backup). J'ai configuré le script actuel pour une sauvegarde dans le serveur Controleur de domaine, disque D:

Comment sauvegarder en plus dans un 2eme $backupPath en utilisant le même script?

Merci

$ErrorActionPreference = "Stop"
$folderName = (Get-Date).tostring("yyyy-MM-dd")
$backupPath = "D:\GPO BACKUP\$folderName"
$domainName = (Get-ADDomain).dnsroot

try {
    # Test si le dossier de sauvegarde des GPO existe, sinon on le crée
    if (-not (Test-Path -Path $backupPath)) {
        Write-Host "Le dossier de sauvegarde n'existe pas, création du dossier en cours" -ForegroundColor Yellow
        New-Item -Path $backupPath -ItemType Directory -ErrorAction Stop | Out-Null
    }

    # Récupération de toutes les GPOs
    Write-Host "Collecte de toutes les GPOs" -ForegroundColor Cyan
    $AllGpos = Get-GPO -All -Domain $domainName -ErrorAction Stop

    # Pour chaque GPO on créé un dossier de backup et on effectue la sauvegarde
    foreach ($gpo in $AllGpos) {
        $gpoBackupFolder = Join-Path -Path $backupPath -ChildPath $gpo.DisplayName
        if (-not (Test-Path -Path $gpoBackupFolder)) {
            Write-Host "Création du dossier $gpoBackupFolder" -ForegroundColor Green
            New-Item -Path $gpoBackupFolder -ItemType Directory -ErrorAction Stop | Out-Null
        } else {
            Write-Warning "Le dossier $gpoBackupFolder existe déjà"
        }

        Write-Host "Backup de la GPO : $($gpo.DisplayName)" -ForegroundColor Green
        Backup-GPO -Guid $gpo.Id -Path $gpoBackupFolder -ErrorAction Stop | Out-Null
        
        Write-Host "Export HTML de la GPO : $($gpo.DisplayName)" -ForegroundColor Green
        Get-GPOReport -Guid $gpo.Id -ReportType Html -Path $gpoBackupFolder\$($gpo.DisplayName).html -ErrorAction Stop | Out-Null
    }

    Write-Host "Toutes les GPOs ont été sauvegardées avec succès !" -ForegroundColor Green
} catch {
    Write-Host "Une erreur s'est produite : $($_.Exception.Message)" -ForegroundColor Red
}
A voir également:

2 réponses

GinToniik Messages postés 4 Date d'inscription dimanche 26 novembre 2023 Statut Membre Dernière intervention 26 novembre 2023
Modifié le 26 nov. 2023 à 23:02

Bonjour adgm1,

Tu peux créer un array pour mettre tes dossiers, exemple :

$backupPaths = @("D:\GPO BACKUP\$folderName", "D:\chemin\dossier\$folderName")

Ensuite, tu peux faire un ForEach-Object dans ton foreach afin de parcourir l'array des dossiers :

$backupPaths | ForEach-Object {
	$gpoBackupFolder = Join-Path -Path $_ -ChildPath $gpo.DisplayName
        if (-not (Test-Path -Path $gpoBackupFolder)) {
            Write-Host "Création du dossier $gpoBackupFolder" -ForegroundColor Green
            New-Item -Path $gpoBackupFolder -ItemType Directory -ErrorAction Stop | Out-Null
        } else {
            Write-Warning "Le dossier $gpoBackupFolder existe déjà "
        }

        Write-Host "Backup de la GPO : $($gpo.DisplayName)" -ForegroundColor Green
        Backup-GPO -Guid $gpo.Id -Path $gpoBackupFolder -ErrorAction Stop | Out-Null
        
        Write-Host "Export HTML de la GPO : $($gpo.DisplayName)" -ForegroundColor Green
        Get-GPOReport -Guid $gpo.Id -ReportType Html -Path $gpoBackupFolder\$($gpo.DisplayName).html -ErrorAction Stop | Out-Null
}

La différence est quand dans le ForEach-Object, $backupPath prend la valeur de $_ (résultat du ForEach-Object qui parcour l'array).

Le fait d'utiliser un array te permet d'ajouter autant de dossier que tu le souhaites.

$backupPaths = @("D:\GPO BACKUP\$folderName", "D:\chemin\dossier\$folderName", "D:\autre\dossier\backup\$folderName")

Je n'ai pas testé le code, j'y vais selon mes connaissances ;)

GinToniik

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
18 déc. 2023 à 01:10

merci pour cette reponse. pour le moment je vois pas trop ou je dois insérer le foreach-Object dans mon scipt. Pas grave je programmerai 2 script distinct pour sauvegarder à 2 endroits différents.

J'ai par contre une erreur qui se produit à priori à cause d'un nom de GPO mal orthographié mais je n'arrive pas à l'identifier (j'ai une centaine de GPO). Le message est "La valeur n'est pas comprise dans la plage attendue."

Comment je peux savoir de quel GPO il s'agit?

merci

0