Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

[Active Directory] – Supervision du groupe « Schéma Admins » avec Powershell

Lorsque l’on souhaite superviser la modification de groupes à privilèges dans l’Active Directory il faut surveiller les Events suivants:

  • EventId 4756: Ajout d’un membre dans le groupe
  • EventId 4757: Retrait d’un membre dans le groupe

Scripts

A l’aide des quelques lignes de Powershell ci dessous, vous pourrez superviser la modification de ce groupe.

Pour cela il vous est possible de l’intégrer dans une boucle à intervalle de 30 secondes (c’est le plus petit intervalle de temps que j’ai eu l’occasion d’essayer sur un AD de production) et d’envoyer les alertes par Mail ou dans un canal Teams via Microsoft Graph ou un relai SMTP.

 

Note:

Il faudra toutefois prendre soins de remplacer la commande « Write-Host » (présente pour le lab) par la méthode qui vous convient le mieux (Variable, sortie dans un fichier de logs, envoie de mail…).

# Variables
$Date = Get-Date
$FullDate = $Date.ToString("yyyy-MM-dd")
$PDC = $AllDC = Get-ADDomainController -Filter * | where {$_.OperationMasterRoles -contains "PDCEmulator"}
$PDC = $PDC.Name

# Check Modification Time for Schema Admins
$SchemaAdminsProperties = Get-ADGroup "Schema Admins" -Properties Modified -Server $PDC
$LastModifiedDay = ($SchemaAdminsProperties.modified).ToString("yyyy-MM-dd")
$Details = $SchemaAdminsProperties.modified
$StorageSchema = $Details

# Looking for check if a modification was made today
If (($LastModifiedDay -eq $FullDate) -and ($Details -ne $LastModificationTimeSchema)) {
    $EventSchemaAdmin = Get-WinEvent -ComputerName $PDC -FilterHashtable @{LogName='Security';Id=4756,4757} -MaxEvents 200 | where {$_.TimeCreated -match $Details}
    $EventSchemaAdmin | foreach {
        $TimeCreated = $_.TimeCreated
        $SchemaAdminAction = $_
        If($SchemaAdminAction.Properties[2].value -eq 'Schema Admins') {
            $By = $SchemaAdminAction.Properties[6].value
            $Account = $SchemaAdminAction.Properties[0].value
            Switch ($SchemaAdminAction.ID) {
                4756 {
                    Write-Host "$Account was added by $By on Schema Group at $Details"
                    }
                4757 {
                    Write-Host "$Account was removed by $By on Schema Group at $Details"
                    }
                }
            }
        }
    $LastModificationTimeSchema = $StorageSchema
    }
Else {
    $LastModificationTimeSchema = $StorageSchema
    }
# Release
$SchemaAdminsProperties = $null
$LastModifiedDay = $null
$Details = $null

[Active Directory] – Supervision du groupe « DNS Admins » avec Powershell

Lorsque l’on souhaite superviser la modification de groupes à privilèges dans l’Active Directory il faut surveiller les Events suivants:

  • EventId 4732: Ajout d’un membre dans le groupe
  • EventId 4733: Retrait d’un membre dans le groupe

Script

A l’aide des quelques lignes de Powershell ci dessous, vous pourrez superviser la modification de ce groupe.

Pour cela il vous est possible de l’intégrer dans une boucle à intervalle de 30 secondes (c’est le plus petit intervalle de temps que j’ai eu l’occasion d’essayer sur un AD de production) et d’envoyer les alertes par Mail ou dans un canal Teams via Microsoft Graph ou un relai SMTP.

 

Note:

Il faudra toutefois prendre soins de remplacer la commande « Write-Host » (présente pour le lab) par la méthode qui vous convient le mieux (Variable, sortie dans un fichier de logs, envoie de mail…).

# Variables
$Date = Get-Date
$FullDate = $Date.ToString("yyyy-MM-dd")
$PDC = $AllDC = Get-ADDomainController -Filter * | where {$_.OperationMasterRoles -contains "PDCEmulator"}
$PDC = $PDC.Name

# Check Modification Time for DNS Admins
$DnsAdminsProperties = Get-ADGroup "DNSAdmins" -Properties Modified -Server $PDC
$LastModifiedDay = ($DnsAdminsProperties.modified).ToString("yyyy-MM-dd")
$Details = $DnsAdminsProperties.modified
$StorageDns = $Details

# Looking for check if a modification was made today
If (($LastModifiedDay -eq $FullDate) -and ($Details -ne $LastModificationTimeDns)) {
    $EventDnsAdmin = Get-WinEvent -ComputerName $PDC -FilterHashtable @{LogName='Security';Id=4732,4733} -MaxEvents 200 | where {$_.TimeCreated -match $Details}
    $EventDnsAdmin | foreach {
        $TimeCreated = $_.TimeCreated
        $DnsAdminAction = $_
        If($DnsAdminAction.Properties[2].value -eq 'DnsAdmins') {
            $By = $DnsAdminAction.Properties[6].value
            $Account = $DnsAdminAction.Properties[0].value
            Switch ($DnsAdminAction.ID) {
                4732 {
                    Write-Host "$Account was added by $By on DnsAdmins Group at $Details"
                    }
                4733 {
                    Write-Host "$Account was removed by $By on DnsAdmins Group at $Details"
                    }
                }
            }
        }
    $LastModificationTimeDns = $StorageDns
    }
Else {
    $LastModificationTimeDns = $StorageDns
    }
    
# Release
$DnsAdminsProperties = $null
$LastModifiedDay = $null
$Details = $null

[Powershell] – Pense bête pour l’installation du module Microsoft.Graph version Beta

Il m’arrive régulièrement de devoir jouer avec les modules Powershell en fonction des scripts que j’écris, selon le contexte je n’emploie pas toujours les mêmes.

Malheureusement pour moi, j’ai récemment eu besoin d’utiliser la version Beta de Microsoft.Graph qui m’a demandé d’enlever quelques autres modules présents sur mon poste.

L’opération n’est pas compliqué mais je n’aime pas chercher sans cesse les commandes, voici donc un petit pense bête pour supprimer le module Microsoft.Graph et ses dépendances pour réinstaller la version beta.

Suppression du module et ses dépendances.

# Remove All
Uninstall-Module Microsoft.Graph -AllVersions

Get-InstalledModule Microsoft.Graph.* | ? Name -ne "Microsoft.Graph.Authentication" | Uninstall-Module -AllVersions
Uninstall-Module Microsoft.Graph.Authentication -AllVersions

 

Avant de lancer la réinstallation on n’oublie pas de passer la commande. 

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

 

Sinon on aura le droit à ce petit message 🙂

Et enfin on pousse le beta

Install-Module Microsoft.Graph.Beta -Repository PSGallery -Force