Untitled
Function Set-LogonHours { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [ValidateRange(0, 23)] $TimeIn24Format, # Heures en format 24h à appliquer [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, Position=0)] $Identity, # Utilisateur ou groupe d'utilisateurs [parameter(mandatory=$False)] [ValidateSet("WorkingDays", "NonWorkingDays")] $NonSelectedDaysare="NonWorkingDays", # Jours de la semaine sélectionnés pour les restrictions # Paramètres des jours de la semaine [parameter(mandatory=$False)][switch]$Sunday, [parameter(mandatory=$False)][switch]$Monday, [parameter(mandatory=$False)][switch]$Tuesday, [parameter(mandatory=$False)][switch]$Wednesday, [parameter(mandatory=$False)][switch]$Thursday, [parameter(mandatory=$False)][switch]$Friday, [parameter(mandatory=$False)][switch]$Saturday ) Process { # Initialisation des valeurs de chaque jour $FullByte = New-Object "byte[]" 21 $FullDay = [ordered]@{} 0..23 | foreach { $FullDay.Add($_,"0") } # Appliquer les horaires sélectionnés $TimeIn24Format.ForEach({ $FullDay[$_] = 1 }) $Working = -join ($FullDay.Values) # Définition des valeurs pour les jours de travail ou jours non travaillés Switch ($PSBoundParameters["NonSelectedDaysare"]) { 'NonWorkingDays' { $SundayValue = $MondayValue = $TuesdayValue = $WednesdayValue = $ThursdayValue = $FridayValue = $SaturdayValue = "000000000000000000000000" } 'WorkingDays' { $SundayValue = $MondayValue = $TuesdayValue = $WednesdayValue = $ThursdayValue = $FridayValue = $SaturdayValue = "111111111111111111111111" } } # Modification des jours de la semaine spécifiés Switch ($PSBoundParameters.Keys) { 'Sunday' { $SundayValue = $Working } 'Monday' { $MondayValue = $Working } 'Tuesday' { $TuesdayValue = $Working } 'Wednesday' { $WednesdayValue = $Working } 'Thursday' { $ThursdayValue = $Working } 'Friday' { $FridayValue = $Working } 'Saturday' { $SaturdayValue = $Working } } # Construire la chaîne de 168 bits représentant toute la semaine $AllTheWeek = "{0}{1}{2}{3}{4}{5}{6}" -f $SundayValue, $MondayValue, $TuesdayValue, $WednesdayValue, $ThursdayValue, $FridayValue, $SaturdayValue # Gestion des fuseaux horaires if ((Get-TimeZone).BaseUtcOffset.Hours -lt 0) { $TimeZoneOffset = $AllTheWeek.Substring(0, 168 + ((Get-TimeZone).BaseUtcOffset.Hours)) $TimeZoneOffset1 = $AllTheWeek.Substring(168 + ((Get-TimeZone).BaseUtcOffset.Hours)) $FixedTimeZoneOffSet = "$TimeZoneOffset1$TimeZoneOffset" } elseif ((Get-TimeZone).BaseUtcOffset.Hours -gt 0) { $TimeZoneOffset = $AllTheWeek.Substring(0, ((Get-TimeZone).BaseUtcOffset.Hours)) $TimeZoneOffset1 = $AllTheWeek.Substring(((Get-TimeZone).BaseUtcOffset.Hours)) $FixedTimeZoneOffSet = "$TimeZoneOffset1$TimeZoneOffset" } else { $FixedTimeZoneOffSet = $AllTheWeek } # Conversion du résultat en tableau binaire de bytes $i = 0 $BinaryResult = $FixedTimeZoneOffSet -split '(\d{8})' | Where { $_ -match '(\d{8})' } foreach ($singleByte in $BinaryResult) { $Tempvar = $singleByte.ToCharArray() [array]::Reverse($Tempvar) $Tempvar = -join $Tempvar $Byte = [Convert]::ToByte($Tempvar, 2) $FullByte[$i] = $Byte $i++ } # Appliquer les restrictions à l'utilisateur ou groupe try { Set-ADUser -Identity $Identity -Replace @{logonHours = $FullByte} } catch { Write-Host "Erreur lors de l'application des restrictions pour $Identity : $_" -ForegroundColor Red } } end { Write-Host "Toutes les restrictions de connexion ont été appliquées avec succès." -ForegroundColor Green } } # Appliquer les restrictions d'horaires pour tous les groupes commençant par "GG-" $GGGroups = Get-ADGroup -Filter { Name -like "GG-*" } foreach ($group in $GGGroups) { Write-Host "Début de l'application des restrictions pour le groupe : $($group.Name)" if ($group.Name -eq "GG-IT") { # Restrictions pour le groupe IT (lundi 7h au samedi 23h) Get-ADGroupMember -Identity $group | Set-LogonHours -TimeIn24Format @(7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23) -Monday -Tuesday -Wednesday -Thursday -Friday -Saturday -NonSelectedDaysare WorkingDays Write-Host "Les restrictions pour IT ont été appliquées avec succès pour le groupe : $($group.Name)" -ForegroundColor Green } else { # Restrictions pour les autres groupes (lundi au vendredi de 8h à 18h) Get-ADGroupMember -Identity $group | Set-LogonHours -TimeIn24Format @(8,9,10,11,12,13,14,15,16,17,18) -Monday -Tuesday -Wednesday -Thursday -Friday -NonSelectedDaysare WorkingDays Write-Host "Les restrictions pour les autres groupes ont été appliquées avec succès pour le groupe : $($group.Name)" -ForegroundColor Green } } Write-Host "Le script a terminé l'application des restrictions pour tous les groupes GG-." -ForegroundColor Green
Leave a Comment