Untitled

 avatar
unknown
plain_text
25 days ago
9.3 kB
6
Indexable
# Fonction pour convertir un tableau d'heures en bytes
Function ConvertTo-LogonHoursBytes {
    param (
        [array]$logonHoursArray
    )

    # Vérification que le tableau contient bien 168 éléments (24 heures x 7 jours)
    if ($logonHoursArray.Length -ne 168) {
        throw "Le tableau logonHours doit contenir exactement 168 bits (24 heures x 7 jours)."
    }

    $byteArray = @()
    for ($i = 0; $i -lt 21; $i++) {
        $byte = 0
        for ($j = 0; $j -lt 8; $j++) {
            # Convertir les bits en valeur binaire (on applique le poids de la position des bits)
            $byte += $logonHoursArray[$i * 8 + $j] * [math]::Pow(2, 7 - $j)
        }
        # Ajouter le byte à la liste
        $byteArray += [byte]$byte
    }
    return ,$byteArray
}

# Fonction pour appliquer les restrictions horaires
Function Set-LogonHours {
    param (
        [string]$groupName,
        [array]$logonHours
    )

    Write-Host "Application des restrictions pour le groupe $groupName..." -ForegroundColor Cyan

    # Vérification de l'existence du groupe
    try {
        $group = Get-ADGroup -Identity $groupName -ErrorAction Stop
    } catch {
        Write-Host "Erreur : Le groupe $groupName n'existe pas." -ForegroundColor Red
        return
    }

    # Convertir les heures de connexion en tableau de bytes
    try {
        $logonHoursBytes = ConvertTo-LogonHoursBytes -logonHoursArray $logonHours
    } catch {
        Write-Host "Erreur : Impossible de convertir les heures de connexion." -ForegroundColor Red
        return
    }

    # Récupérer les utilisateurs du groupe
    try {
        $users = Get-ADGroupMember -Identity $groupName -Recursive | Where-Object { $_.objectClass -eq "user" }
    } catch {
        Write-Host "Erreur : Impossible de récupérer les membres du groupe $groupName. Vérifiez que le groupe existe." -ForegroundColor Red
        return
    }

    if (-not $users) {
        Write-Host "Aucun utilisateur trouvé dans le groupe $groupName." -ForegroundColor Yellow
        return
    }

    # Appliquer les restrictions aux utilisateurs du groupe
    $users | ForEach-Object {
        Write-Host "  Tentative d'application des restrictions pour l'utilisateur : $($_.SamAccountName)" -ForegroundColor Yellow
        try {
            # Appliquer les restrictions sur les heures de connexion pour chaque utilisateur
            Set-ADUser -Identity $_.SamAccountName -Replace @{logonHours=$logonHoursBytes}
            Write-Host "  Restrictions appliquées avec succès pour l'utilisateur : $($_.SamAccountName)" -ForegroundColor Green
        } catch {
            Write-Host "Erreur : Impossible d'appliquer les restrictions pour l'utilisateur $($_.SamAccountName). Détails : $_" -ForegroundColor Red
        }
    }
}

# Définir les heures de connexion pour les utilisateurs standard (8h-18h, lun-ven)
$timeRestrictionsStandard = @(
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Lundi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Mardi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Mercredi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Jeudi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Vendredi (8h-18h)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   # Samedi (aucune connexion)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    # Dimanche (aucune connexion)
)

# Définir les heures de connexion pour les utilisateurs IT (7h lundi - 23h samedi)
$timeRestrictionsIT = @(
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Lundi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Mardi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Mercredi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Jeudi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Vendredi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Samedi (7h-23h)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    # Dimanche (aucune connexion)
)

# Appliquer les restrictions horaires pour chaque groupe d'utilisateurs
Set-LogonHours -groupName "GG-DIRECTION" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-RH" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-COMPTA" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-COMMERCIAUX" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-R&D" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-IT" -logonHours $timeRestrictionsIT

Write-Host "Les restrictions horaires ont été appliquées avec succès !" -ForegroundColor Green









-----------------------------------------------------------------------------------------------------





Function ConvertTo-LogonHoursBytes {
    param (
        [array]$logonHoursArray
    )
    if ($logonHoursArray.Length -ne 168) {
        throw "Le tableau logonHours doit contenir exactement 168 bits (24 heures x 7 jours)."
    }
    $byteArray = @()
    for ($i = 0; $i -lt 21; $i++) {
        $byte = 0
        for ($j = 0; $j -lt 8; $j++) {
            $byte += $logonHoursArray[$i * 8 + $j] * [math]::Pow(2, 7 - $j)
        }
        $byteArray += [byte]$byte
    }
    return ,$byteArray
}

Function Set-LogonHours {
    param (
        [string]$groupName,
        [array]$logonHours
    )

    Write-Host "Application des restrictions pour le groupe $groupName..." -ForegroundColor Cyan
    
    # Vérification de l'existence du groupe
    try {
        $group = Get-ADGroup -Identity $groupName -ErrorAction Stop
    } catch {
        Write-Host "Erreur : Le groupe $groupName n'existe pas." -ForegroundColor Red
        return
    }

    # Convertir les heures de connexion en tableau de bytes
    try {
        $logonHoursBytes = ConvertTo-LogonHoursBytes -logonHoursArray $logonHours
    } catch {
        Write-Host "Erreur : Impossible de convertir les heures de connexion." -ForegroundColor Red
        return
    }

    # Récupérer les utilisateurs du groupe
    try {
        $users = Get-ADGroupMember -Identity $groupName -Recursive | Where-Object { $_.objectClass -eq "user" }
    } catch {
        Write-Host "Erreur : Impossible de récupérer les membres du groupe $groupName. Vérifiez que le groupe existe." -ForegroundColor Red
        return
    }

    if (-not $users) {
        Write-Host "Aucun utilisateur trouvé dans le groupe $groupName." -ForegroundColor Yellow
        return
    }

    # Appliquer les restrictions aux utilisateurs du groupe
    $users | ForEach-Object {
        Write-Host "  Tentative d'application des restrictions pour l'utilisateur : $($_.SamAccountName)" -ForegroundColor Yellow
        try {
            Set-ADUser -Identity $_.SamAccountName -Replace @{logonHours=$logonHoursBytes}
            Write-Host "  Restrictions appliquées avec succès pour l'utilisateur : $($_.SamAccountName)" -ForegroundColor Green
        } catch {
            Write-Host "Erreur : Impossible d'appliquer les restrictions pour l'utilisateur $($_.SamAccountName). Détails : $_" -ForegroundColor Red
        }
    }
}

# Définir les heures de connexion pour les utilisateurs standard (8h-18h, lun-ven)
$timeRestrictionsStandard = @(
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Lundi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Mardi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Mercredi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Jeudi (8h-18h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Vendredi (8h-18h)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   # Samedi (aucune connexion)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    # Dimanche (aucune connexion)
)

# Définir les heures de connexion pour les utilisateurs IT (7h lundi - 23h samedi)
$timeRestrictionsIT = @(
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Lundi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Mardi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Mercredi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Jeudi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,   # Vendredi (7h-23h)
    0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,   # Samedi (7h-23h)
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    # Dimanche (aucune connexion)
)

# Appliquer les restrictions pour chaque groupe
Set-LogonHours -groupName "GG-DIRECTION" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-RH" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-COMPTA" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-COMMERCIAUX" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-R&D" -logonHours $timeRestrictionsStandard
Set-LogonHours -groupName "GG-IT" -logonHours $timeRestrictionsIT

Write-Host "Les restrictions horaires ont été appliquées avec succès !" -ForegroundColor Green
Editor is loading...
Leave a Comment