IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Script Powershell + GPO Paramètres de sécurité.


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Script Powershell + GPO Paramètres de sécurité.
    Bonjour à tous,

    Je partage avec vous un script PowerShell que j'ai développé pour automatiser la création et le déploiement d'une GPO qui désactive le compte invité sur les postes du domaine.

    Le script permet de :
    - Créer une GPO avec un nom personnalisé
    - Configurer automatiquement les paramètres de sécurité (désactivation compte invité, longueur mot de passe, etc.)
    - Lier la GPO au domaine
    - Déployer la mise à jour sur tous les postes clients

    Le code est fonctionnel mais je rencontre un problème : bien que le script se déploie correctement sur les postes clients, les modifications ne prennent pas effet sans une intervention manuelle sur la GPO. Que ce soit pour la désactivation du compte invité ou d'autres paramètres comme le temps d'expiration des mots de passe, je dois systématiquement faire une modification manuelle dans la GPO pour que les changements s'appliquent.

    J'ai d'abord pensé à un problème de droits, j'ai donc créé un exécutable pour lancer le script en tant qu'administrateur, mais cela n'a rien changé.

    Mon automatisation perd tout son sens si je dois intervenir manuellement à chaque fois...

    Est-ce que quelqu'un aurait déjà rencontré ce problème ou aurait une piste ? Je soupçonne peut-être un problème de priorité ou de refresh de la GPO, mais je n'arrive pas à identifier la cause exacte.

    Je partage le code ci-dessous pour ceux qui voudraient l'examiner :

    # Fonction de mise à jour GPO
    function Update-DomainGPO {
    Write-Host "Récupération des ordinateurs..."

    try {
    $computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
    $totalComputers = $computers.Count
    $current = 0

    foreach ($computer in $computers) {
    $current++
    Write-Progress -Activity "Mise à jour GPO" -Status "Mise à jour sur $computer" -PercentComplete (($current / $totalComputers) * 100)

    try {
    if (Test-Connection -ComputerName $computer -Count 1 -Quiet) {
    Invoke-Command -ComputerName $computer -ScriptBlock {
    gpupdate /force /wait:0
    } -ErrorAction SilentlyContinue
    }
    }
    catch {
    continue
    }
    }

    Write-Host "Mise à jour terminée !" -ForegroundColor Green
    }
    catch {
    Write-Host "Erreur lors de la mise à jour: $($_.Exception.Message)" -ForegroundColor Red
    }
    }

    # Création de la GPO
    function New-CustomGPO {
    param(
    [Parameter(Mandatory=$true)]
    [string]$GPOName
    )

    try {
    New-GPO -Name $GPOName -Comment "GPO pour désactiver le compte invité"

    $securityContent = @"
    [Unicode]
    Unicode=yes
    [System Access]
    EnableGuestAccount = 0
    MinimumPasswordLength = 14
    PasswordComplexity = 1
    [Version]
    signature="`$CHICAGO`$"
    Revision=1
    [Registry Values]
    MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1
    [Privilege Rights]
    SeDenyNetworkLogonRight = *S-1-5-32-546
    SeDenyInteractiveLogonRight = *S-1-5-32-546
    "@

    $securityPath = "$env:TEMP\security.inf"
    $securityContent | Out-File -FilePath $securityPath -Encoding Unicode -Force

    $gpo = Get-GPO -Name $GPOName
    $gpoPath = "\\$env:USERDNSDOMAIN\SYSVOL\$env:USERDNSDOMAIN\Policies\{$($gpo.Id)}"
    $machineDir = "$gpoPath\Machine\Microsoft\Windows NT\SecEdit"

    New-Item -Path $machineDir -ItemType Directory -Force | Out-Null
    Copy-Item -Path $securityPath -Destination "$machineDir\GptTmpl.inf" -Force

    $domainDN = (Get-ADDomain).DistinguishedName
    New-GPLink -Name $GPOName -Target $domainDN -LinkEnabled Yes -Enforced Yes

    Remove-Item -Path $securityPath -Force -ErrorAction SilentlyContinue

    Write-Host "GPO créée avec succès." -ForegroundColor Green

    $updateNetwork = Read-Host "Voulez-vous mettre à jour le réseau ? (O/N)"
    if ($updateNetwork -eq 'O') {
    Update-DomainGPO
    }
    }
    catch {
    Write-Host "Erreur: $($_.Exception.Message)" -ForegroundColor Red
    }
    }

    # Utilisation du script
    $gpoName = Read-Host "Entrez le nom de la GPO"
    if (-not [string]::IsNullOrWhiteSpace($gpoName)) {
    New-CustomGPO -GPOName $gpoName
    }
    else {
    Write-Host "Le nom de la GPO ne peut pas être vide." -ForegroundColor Red
    }


    Aussi j'ai mis en place un scripte pour forcer les mises à jours sur Microsoft 365 App et cela fonctionne bien, à partir d'une Template Microsoft, cela n'est pas dans paramètres de sécurité.
    Peut-être un piste ...

    Nom : Capture d’écran 2025-02-10 105912.png
Affichages : 107
Taille : 239,5 Ko



    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je n'ai pas d'expérience sur la création de gpo via powershell, mais je pense aussi que cela doit venir des permissions
    Essaie en utilisant Set-GPPermission : https://learn.microsoft.com/en-us/po...sserver2025-ps

    J'ai remis en forme le script pour mieux comprendre (a ma sauce)

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    # Fonction de mise à jour GPO
    function Update-DomainGPO
    {
        Write-Host "Récupération des ordinateurs..."
     
        try
        {
            $computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
            $totalComputers = $computers.Count
            $current = 0
     
            foreach ($computer in $computers)
            {
                $current++
                Write-Progress -Activity "Mise à jour GPO" -Status "Mise à jour sur $computer" -PercentComplete (($current / $totalComputers) * 100)
     
                try
                {
                    if (Test-Connection -ComputerName $computer -Count 1 -Quiet)
                    {
                        Invoke-Command -ComputerName $computer -ScriptBlock {
                        gpupdate /force /wait:0
                        } -ErrorAction SilentlyContinue
                    }
                }
                catch
                {
                    continue
                }
            }
     
            Write-Host "Mise à jour terminée !" -ForegroundColor Green
        }
        catch
        {
            Write-Host "Erreur lors de la mise à jour: $($_.Exception.Message)" -ForegroundColor Red
        }
    }
     
    # Création de la GPO
    function New-CustomGPO {
        param(
        [Parameter(Mandatory=$true)]
        [string]$GPOName
        )
     
        try
        {
            New-GPO -Name $GPOName -Comment "GPO pour désactiver le compte invité"
     
    $securityContent = @"
    [Unicode]
    Unicode=yes
    [System Access]
    EnableGuestAccount = 0
    MinimumPasswordLength = 14
    PasswordComplexity = 1
    [Version]
    signature="`$CHICAGO`$"
    Revision=1
    [Registry Values]
    MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1
    [Privilege Rights]
    SeDenyNetworkLogonRight = *S-1-5-32-546
    SeDenyInteractiveLogonRight = *S-1-5-32-546
    "@
     
            $securityPath = "$env:TEMP\security.inf"
            $securityContent | Out-File -FilePath $securityPath -Encoding Unicode -Force
     
            $gpo = Get-GPO -Name $GPOName
            $gpoPath = "\\$env:USERDNSDOMAIN\SYSVOL\$env:USERDNSDOMAIN\Policies\{$($gpo.Id)}"
            $machineDir = "$gpoPath\Machine\Microsoft\Windows NT\SecEdit"
     
            New-Item -Path $machineDir -ItemType Directory -Force | Out-Null
            Copy-Item -Path $securityPath -Destination "$machineDir\GptTmpl.inf" -Force
     
            $domainDN = (Get-ADDomain).DistinguishedName
            New-GPLink -Name $GPOName -Target $domainDN -LinkEnabled Yes -Enforced Yes
     
            Remove-Item -Path $securityPath -Force -ErrorAction SilentlyContinue
     
            Write-Host "GPO créée avec succès." -ForegroundColor Green
     
            $updateNetwork = Read-Host "Voulez-vous mettre à jour le réseau ? (O/N)"
            if ($updateNetwork -eq 'O')
            {
                Update-DomainGPO
            }
        }
        catch
        {
            Write-Host "Erreur: $($_.Exception.Message)" -ForegroundColor Red
        }
    }
     
    # Utilisation du script
    $gpoName = Read-Host "Entrez le nom de la GPO"
    if (-not [string]::IsNullOrWhiteSpace($gpoName)) {
        New-CustomGPO -GPOName $gpoName
    }
    else
    {
        Write-Host "Le nom de la GPO ne peut pas être vide." -ForegroundColor Red
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Bonjour,

    Merci beaucoup, finalement cela était dû à un manque de paramètre de droit WMI.

    Merci .

    Après 3 jours de recherche !

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu peux cloturer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'affichage d'un script powershell avec une gpo
    Par tao-pai-pai dans le forum Windows 10
    Réponses: 1
    Dernier message: 23/09/2020, 19h21
  2. [PowerShell] problème de droits lors du lancement d'un script powershell par gpo
    Par alexity dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 25/09/2012, 11h17
  3. Essayer d'activer un script powershell sous IIS
    Par machpro dans le forum IIS
    Réponses: 1
    Dernier message: 06/12/2008, 00h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo