Question
[Résolu] Lister les groupe universel de sécurité
- TimCruz
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 25
- Remerciements reçus 0
il y a 16 ans 2 mois #5832
par TimCruz
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
[Résolu] Lister les groupe universel de sécurité a été créé par TimCruz
Bonjour,
Tout d'abord, je voudrais remercier les administrateurs et participants de ce site, sur lequel je navigue pas mal.
Je vous explique à présent mon problème. Je débute en powershell et je voudrais faire une chose simple mais n'y parviens pas :
Je dois créer une liste de distribution Exchange 2007 pour un nombre donné de groupe dans mon active directory (ADS). D'autres groupes ADS seront rajouté par une appli maison et il faut qu'une routine (script POWERSHELL quotidien) crée une liste de distribution pour chaque ajout de groupe. Pour faciliter la chose, mes groupes sont tous des groupes de sécurité avec un scope universel. Je désire lister ces groupes par nom. Ensuite avec une boucle, je retirerai les groupes administrateur de mon listing et créerai une liste de distribution pour chaque membre de mon listing.
Je parviens à faire un listing par nom en tapant ces commandes dans mon shell :
[code:1]$group = get-group | where-object {$_.grouptype -eq \"SecurityEnabled, Universal\"}
$group
Foreach ($elements in $group)
{
Write-Host \"$($elements.name)\"
}
[/code:1]
Mais si je copie ce code dans un script et l'éxécute, j'obtiens l'erreur suivante :
[code:1]Le terme « get-group » n'est pas reconnu en tant qu'applet de commande, fonction, programme exécutable ou fichier de script. Vérifiez le terme et réessayez.
Au niveau de C:\foreach.ps1 : 1 Caractère : 19
+ $group = get-group <<<< | where-object {$_.grouptype -eq \"SecurityEnabled, Universal\"}
[/code:1]
Pourquoi ai-je cette erreur?
Je sais pouvoir consulter mes groupes via ce script :
[code:1]$objDomaine = [ADSI]''
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher($objDomaine)
$objRecherche.Filter= '(objectCategory=group)'
$recherche = $objRecherche.FindAll()
[/code:1]
Mais le rendu de ma variable $recherche ne me permets pas les même manipulations que la commande get-group. Sauriez vous m'aider à avancer sur ma problématique?
Une fois à bout de mon problème, je vous communiquerai mon script complet.<br><br>Message édité par: TimCruz, à: 29/12/09 14:21
Tout d'abord, je voudrais remercier les administrateurs et participants de ce site, sur lequel je navigue pas mal.
Je vous explique à présent mon problème. Je débute en powershell et je voudrais faire une chose simple mais n'y parviens pas :
Je dois créer une liste de distribution Exchange 2007 pour un nombre donné de groupe dans mon active directory (ADS). D'autres groupes ADS seront rajouté par une appli maison et il faut qu'une routine (script POWERSHELL quotidien) crée une liste de distribution pour chaque ajout de groupe. Pour faciliter la chose, mes groupes sont tous des groupes de sécurité avec un scope universel. Je désire lister ces groupes par nom. Ensuite avec une boucle, je retirerai les groupes administrateur de mon listing et créerai une liste de distribution pour chaque membre de mon listing.
Je parviens à faire un listing par nom en tapant ces commandes dans mon shell :
[code:1]$group = get-group | where-object {$_.grouptype -eq \"SecurityEnabled, Universal\"}
$group
Foreach ($elements in $group)
{
Write-Host \"$($elements.name)\"
}
[/code:1]
Mais si je copie ce code dans un script et l'éxécute, j'obtiens l'erreur suivante :
[code:1]Le terme « get-group » n'est pas reconnu en tant qu'applet de commande, fonction, programme exécutable ou fichier de script. Vérifiez le terme et réessayez.
Au niveau de C:\foreach.ps1 : 1 Caractère : 19
+ $group = get-group <<<< | where-object {$_.grouptype -eq \"SecurityEnabled, Universal\"}
[/code:1]
Pourquoi ai-je cette erreur?
Je sais pouvoir consulter mes groupes via ce script :
[code:1]$objDomaine = [ADSI]''
$objRecherche = New-Object `
System.DirectoryServices.DirectorySearcher($objDomaine)
$objRecherche.Filter= '(objectCategory=group)'
$recherche = $objRecherche.FindAll()
[/code:1]
Mais le rendu de ma variable $recherche ne me permets pas les même manipulations que la commande get-group. Sauriez vous m'aider à avancer sur ma problématique?
Une fois à bout de mon problème, je vous communiquerai mon script complet.<br><br>Message édité par: TimCruz, à: 29/12/09 14:21
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Connexion ou Créer un compte pour participer à la conversation.
- TimCruz
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 25
- Remerciements reçus 0
il y a 16 ans 2 mois #5833
par TimCruz
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Réponse de TimCruz sur le sujet Re:Lister les groupe universel de sécurité
J'ai un éléments de réponse pour ceux que ca intéresse! Je viens de constater qu'en fait PS1.0 n'a (à priori) pas les même bibliothèques que l'EMS de Exchange 2007.
Si je rajoute la ligne
Enfin, je ne ferme pas le sujet car mon script n'est pas fini. Et merci à Vincent mon collègue de bureau pour sa précieuse aide pour ce problème.<br><br>Message édité par: TimCruz, à: 23/12/09 17:00
Si je rajoute la ligne
à mon script powershell, je pourrai l'éxécuter sans problèmes!Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
Enfin, je ne ferme pas le sujet car mon script n'est pas fini. Et merci à Vincent mon collègue de bureau pour sa précieuse aide pour ce problème.<br><br>Message édité par: TimCruz, à: 23/12/09 17:00
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Connexion ou Créer un compte pour participer à la conversation.
- TimCruz
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 25
- Remerciements reçus 0
il y a 16 ans 2 mois #5835
par TimCruz
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Réponse de TimCruz sur le sujet Re:Lister les groupe universel de sécurité
Bon, je suis arrivé au bout de mon problème. Je pense que les fêtes de fin d'années justifient pour beaucoup l'absence de réponse reçue...
Alors comme promis, voici mon script :
[code:1]#Script de création automatique de groupe de distribution à partir des groupes de sécurité à scope Universel
#Connexion à Exchange
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
$titre = 'Log de modification des groupes de distribution du ' + [System.DateTime]::Now
Write-Host $titre
#Listage des groupes de sécurité à scope Universel
$group = get-group |
where-object {$_.grouptype -like \"Universal*\"} |
#Détermination des exceptions (groupes de sécurité à scope universel pour lesquels on décide de ne pas créer de groupe de distribution)
where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
where-object {$_.name -ne \"assistantes_CERAPA\"} |
where-object {$_.name -ne \"accident\"} |
where-object {$_.name -ne \"SIEGE\"} |
where-object {$_.name -ne \"SUD-OUEST\"} |
where-object {$_.name -ne \"NORD-OUEST\"} |
where-object {$_.name -ne \"DGD_DA\"} |
where-object {$_.name -ne \"DGD_JLM\"} |
where-object {$_.name -ne \"IDF\"} |
where-object {$_.name -ne \"SUD\"}
#Listage des groupes de distribution existant
$DG = Get-DistributionGroup
#Comparaison des éléments de la liste de groupes de distribution avec celle des groupes de sécurité pour éviter de retravailler sur une adresse déja éxistante
Foreach ($elements in $group)
{
#Création d'un compteur qui servira de déclencheur à la création des listes de distribution et d'une variable contenant le nom des groupes de sécurité
$compteur = 0
#La variable $resultat est présente dans l'objectif d'une clarification des logs
$resultat = 0
$comparaison = \"$($elements.name)\"
#Comparaison des noms des groupes de distribution avec ceux des groupes de séccurité
Foreach ($elements in $DG)
{
If ($comparaison -eq \"$($elements.name)\"«»)
{
$compteur = $compteur+1 #On incrémente le compteur pour avoir un éléments déterminant la création de la liste de distribution
}
}
#Création d'un groupe selon la valeur retournée par $compteur
If ($compteur -eq 0)
{
#Activation du groupe de distribution associé au groupe de sécurité
Write-Host `n`n\"Tentative de création d'un groupe de distribution\" \"$($comparaison)\"`n
Enable-DistributionGroup -Identity \"$($comparaison)\"
$resultat = $resultat+1
}
}
#Mise à jour des log en cas d'absence de changements effectués
If ($resultat -eq 0)
{
Write-Host `n`n\"Aucun changement n'a été effectué sur les groupes de distribution\"
}
[/code:1]
Pour avoir un log, j'appelle mon script avec ce petit *.bat :
[code:1]powershell x:\foreach.ps1 >x:\Groupes.doc
powershell x:\rapport_creation_DL.ps1
[/code:1]
Pour ceux qui se demandent à quoi correspond le rapport_creation_DL.ps1, je m'envoie tout simplement mes rapports par mail. Par le script suivant :
[code:1]$expediteur = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$destinataire = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$serveur = 'exchange.mondomaine.fr'
$fichier = 'x:Groupes.doc'
$objet = '[LOG] Création de liste de distribution ' + [System.DateTime]::Now
$texte = 'Un modification des groupes a été effectuées. Veuillez trouver, en pièce jointe de ce mail, le log de création de liste de distribution pour un/des groupe(s) de sécurité universelle par script automatique powershell.
Le fichier Groupes.doc est à ouvrir avec Word en format MS-DOS pour une meilleur lisibilité.'
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$attachment = new-object System.Net.Mail.Attachment $fichier
$message.Attachments.Add($attachment)
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)
[/code:1]
Je me l'envoie au format Word car je trouve que le log est alors plus lisible. Il faut juste l'ouvrir comme un fichier MS-DOS.
Si vous avez des retours quand à une amélioration de mes scripts, je suis plus que preneur. Ne soyez pas trop durs : je débute.
Alors comme promis, voici mon script :
[code:1]#Script de création automatique de groupe de distribution à partir des groupes de sécurité à scope Universel
#Connexion à Exchange
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
$titre = 'Log de modification des groupes de distribution du ' + [System.DateTime]::Now
Write-Host $titre
#Listage des groupes de sécurité à scope Universel
$group = get-group |
where-object {$_.grouptype -like \"Universal*\"} |
#Détermination des exceptions (groupes de sécurité à scope universel pour lesquels on décide de ne pas créer de groupe de distribution)
where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
where-object {$_.name -ne \"assistantes_CERAPA\"} |
where-object {$_.name -ne \"accident\"} |
where-object {$_.name -ne \"SIEGE\"} |
where-object {$_.name -ne \"SUD-OUEST\"} |
where-object {$_.name -ne \"NORD-OUEST\"} |
where-object {$_.name -ne \"DGD_DA\"} |
where-object {$_.name -ne \"DGD_JLM\"} |
where-object {$_.name -ne \"IDF\"} |
where-object {$_.name -ne \"SUD\"}
#Listage des groupes de distribution existant
$DG = Get-DistributionGroup
#Comparaison des éléments de la liste de groupes de distribution avec celle des groupes de sécurité pour éviter de retravailler sur une adresse déja éxistante
Foreach ($elements in $group)
{
#Création d'un compteur qui servira de déclencheur à la création des listes de distribution et d'une variable contenant le nom des groupes de sécurité
$compteur = 0
#La variable $resultat est présente dans l'objectif d'une clarification des logs
$resultat = 0
$comparaison = \"$($elements.name)\"
#Comparaison des noms des groupes de distribution avec ceux des groupes de séccurité
Foreach ($elements in $DG)
{
If ($comparaison -eq \"$($elements.name)\"«»)
{
$compteur = $compteur+1 #On incrémente le compteur pour avoir un éléments déterminant la création de la liste de distribution
}
}
#Création d'un groupe selon la valeur retournée par $compteur
If ($compteur -eq 0)
{
#Activation du groupe de distribution associé au groupe de sécurité
Write-Host `n`n\"Tentative de création d'un groupe de distribution\" \"$($comparaison)\"`n
Enable-DistributionGroup -Identity \"$($comparaison)\"
$resultat = $resultat+1
}
}
#Mise à jour des log en cas d'absence de changements effectués
If ($resultat -eq 0)
{
Write-Host `n`n\"Aucun changement n'a été effectué sur les groupes de distribution\"
}
[/code:1]
Pour avoir un log, j'appelle mon script avec ce petit *.bat :
[code:1]powershell x:\foreach.ps1 >x:\Groupes.doc
powershell x:\rapport_creation_DL.ps1
[/code:1]
Pour ceux qui se demandent à quoi correspond le rapport_creation_DL.ps1, je m'envoie tout simplement mes rapports par mail. Par le script suivant :
[code:1]$expediteur = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$destinataire = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'
$serveur = 'exchange.mondomaine.fr'
$fichier = 'x:Groupes.doc'
$objet = '[LOG] Création de liste de distribution ' + [System.DateTime]::Now
$texte = 'Un modification des groupes a été effectuées. Veuillez trouver, en pièce jointe de ce mail, le log de création de liste de distribution pour un/des groupe(s) de sécurité universelle par script automatique powershell.
Le fichier Groupes.doc est à ouvrir avec Word en format MS-DOS pour une meilleur lisibilité.'
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$attachment = new-object System.Net.Mail.Attachment $fichier
$message.Attachments.Add($attachment)
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)
[/code:1]
Je me l'envoie au format Word car je trouve que le log est alors plus lisible. Il faut juste l'ouvrir comme un fichier MS-DOS.
Si vous avez des retours quand à une amélioration de mes scripts, je suis plus que preneur. Ne soyez pas trop durs : je débute.
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 2 mois #5837
par Gabriel
Réponse de Gabriel sur le sujet Re:Lister les groupe universel de sécurité
Salut TimCruz
Pour quelqu'un qui debute, tu chauffes un script plutot pas mal
en ce qui concerne le add-pssnapin, j'ai une petite optimisation a te proposer:
- si tu lance ton script plusieurs fois de suite a partir de la meme console powershell tu vas avoir un message d'erreur t'indiquant que le snapin est deja chargé, donc pour eviter ça:
[code:1]if (-not (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue)) {Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin}[/code:1]
En ce qui concerne ton script en tant que tel, je n'ai rien a dire (je fais partie des bleus de service). Par contre les groupes universels créés, lorsqu'ils doivent etre une liste de distribution,
Maintenant que ton script est créé, ca te changera pas grands choses... Toute la difficulté dans ton script est de maintenir à jour le \"filtre\", par exemple un petit malin renome \"assistantes_CERAPA\" en \"assistantes_CERAPO\", ca va te poser un soucis...
l'option 3 ci-dessus étant la plus sûr...
Bonnes fêtes de fin d'années<br><br>Message édité par: tonic8, à: 28/12/09 15:28
Pour quelqu'un qui debute, tu chauffes un script plutot pas mal
en ce qui concerne le add-pssnapin, j'ai une petite optimisation a te proposer:
- si tu lance ton script plusieurs fois de suite a partir de la meme console powershell tu vas avoir un message d'erreur t'indiquant que le snapin est deja chargé, donc pour eviter ça:
[code:1]if (-not (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue)) {Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin}[/code:1]
En ce qui concerne ton script en tant que tel, je n'ai rien a dire (je fais partie des bleus de service). Par contre les groupes universels créés, lorsqu'ils doivent etre une liste de distribution,
-
1. pourquoi ne pas les creer avec un titre qui commence par \"LD-Equipe Admin\" (LD : Liste de Distribution).
2. Ou si la norme de nom est bloquée, pourquoi ne pas mettre LD dans la description du groupe (en general peu utilisé...)
3. demander a ce que l'appli maison ne te génère pas un fichier avec le nom des groupes qui ont été généré tous les jours, tu n'aurais qu'à traiter le fichier (et donc moins de groupe)...
4. les mettre dans une OU spécifique...
Maintenant que ton script est créé, ca te changera pas grands choses... Toute la difficulté dans ton script est de maintenir à jour le \"filtre\", par exemple un petit malin renome \"assistantes_CERAPA\" en \"assistantes_CERAPO\", ca va te poser un soucis...
l'option 3 ci-dessus étant la plus sûr...
Bonnes fêtes de fin d'années<br><br>Message édité par: tonic8, à: 28/12/09 15:28
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 2 mois #5839
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lister les groupe universel de sécurité
tonic8 écrit:
Il ya également le pb du fichier attaché, le mieux est d'appeler dispose sur l'objet $Attachment.
TimCruz écrit:
[code:1]Where-object {$_.name -ne xxx}[/code:1]
Tu peux optimiser en utilisant un switch ou un tableau de chaînes et l'opérateur contains :
[code:1]
$TabNames=@(\"Sud\",\"IDF\"}
...
Where-object {$TabNames -Contains $_.name}[/code:1]
+1- si tu lance ton script plusieurs fois de suite a partir de la meme console powershell tu vas avoir un message d'erreur t'indiquant que le snapin est deja chargé
Il ya également le pb du fichier attaché, le mieux est d'appeler dispose sur l'objet $Attachment.
TimCruz écrit:
Pour les segments :Si vous avez des retours quand à une amélioration de mes scripts, je suis plus que preneur.
[code:1]Where-object {$_.name -ne xxx}[/code:1]
Tu peux optimiser en utilisant un switch ou un tableau de chaînes et l'opérateur contains :
[code:1]
$TabNames=@(\"Sud\",\"IDF\"}
...
Where-object {$TabNames -Contains $_.name}[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- TimCruz
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 25
- Remerciements reçus 0
il y a 16 ans 2 mois #5840
par TimCruz
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Réponse de TimCruz sur le sujet Re:Lister les groupe universel de sécurité
Merci pour vos réponses et astuces.
Pour le tableau, comme mon where-object sert à exclure les comptes, j'utilise plutôt l'argument -notcontains. Toutefois, comme j'exclus aussi mes comptes admin et exchange via les commandes
[code:1] where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
[/code:1]
je me demande si l'usage d'un tableau sera réellement porteur en terme d'optimisation?
Le script une fois modifié donne :
[code:1]#Script de création automatique de groupe de distribution à partir des groupes de sécurité à scope Universel
#Connexion à Exchange avec Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin dans le cas seulement où on n'y est pas déja connecté.
if (-not (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue)) {Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin}
$titre = 'Log de modification des groupes de distribution du ' + [System.DateTime]::Now
Write-Host $titre
#Détermination de la listes des exceptions (groupes de sécurité à scope universel pour lesquels on décide de ne pas créer de groupe de distribution)
$exceptions = @(\"assistantes_CERAPA\",\"accident\",\"SIEGE\",\"SUD-OUEST\",\"NORD-OUEST\",\"DGD_DA\",\"DGD_JLM\",\"IDF\",\"SUD\"«»)
#Listage des groupes de sécurité à scope Universel
$group = get-group |
where-object {$_.grouptype -like \"Universal*\"} |
#Exclusion des exceptions et des groupes administrateurs
where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
where-object {$exceptions -notcontains $_.name}
#Listage des groupes de distribution existant
$DG = Get-DistributionGroup
#Comparaison des éléments de la liste de groupes de distribution avec celle des groupes de sécurité pour éviter de retravailler sur une adresse déja éxistante
Foreach ($elements in $group)
{
#Création d'un compteur qui servira de déclencheur à la création des listes de distribution et d'une variable contenant le nom des groupes de sécurité
$compteur = 0
#La variable $resultat est présente dans l'objectif d'une clarification des logs
$resultat = 0
$comparaison = \"$($elements.name)\"
#Comparaison des noms des groupes de distribution avec ceux des groupes de séccurité
Foreach ($elements in $DG)
{
If ($comparaison -eq \"$($elements.name)\"«»)
{
$compteur = $compteur+1 #On incrémente le compteur pour avoir un éléments déterminant la création de la liste de distribution
}
}
#Création d'un groupe selon la valeur retournée par $compteur
If ($compteur -eq 0)
{
#Activation du groupe de distribution associé au groupe de sécurité
Write-Host `n`n\"Tentative de création d'un groupe de distribution\" \"$($comparaison)\"`n
Enable-DistributionGroup -Identity \"$($comparaison)\"
$resultat = $resultat+1
}
}
#Mise à jour des log en cas d'absence de changements effectués
If ($resultat -eq 0)
{
Write-Host `n`n\"Aucun changement n'a été effectué sur les groupes de distribution\"
}
[/code:1]
J'ai essayer de bien l'indenter et de le commenter un maximum pour une compréhension accrue.
Pour le tableau, comme mon where-object sert à exclure les comptes, j'utilise plutôt l'argument -notcontains. Toutefois, comme j'exclus aussi mes comptes admin et exchange via les commandes
[code:1] where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
[/code:1]
je me demande si l'usage d'un tableau sera réellement porteur en terme d'optimisation?
Le script une fois modifié donne :
[code:1]#Script de création automatique de groupe de distribution à partir des groupes de sécurité à scope Universel
#Connexion à Exchange avec Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin dans le cas seulement où on n'y est pas déja connecté.
if (-not (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue)) {Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin}
$titre = 'Log de modification des groupes de distribution du ' + [System.DateTime]::Now
Write-Host $titre
#Détermination de la listes des exceptions (groupes de sécurité à scope universel pour lesquels on décide de ne pas créer de groupe de distribution)
$exceptions = @(\"assistantes_CERAPA\",\"accident\",\"SIEGE\",\"SUD-OUEST\",\"NORD-OUEST\",\"DGD_DA\",\"DGD_JLM\",\"IDF\",\"SUD\"«»)
#Listage des groupes de sécurité à scope Universel
$group = get-group |
where-object {$_.grouptype -like \"Universal*\"} |
#Exclusion des exceptions et des groupes administrateurs
where-object {$_.name -notlike \"Admini*\"} |
where-object {$_.name -notlike \"Exchan*\"} |
where-object {$_.name -notlike \"méthode*\"} |
where-object {$exceptions -notcontains $_.name}
#Listage des groupes de distribution existant
$DG = Get-DistributionGroup
#Comparaison des éléments de la liste de groupes de distribution avec celle des groupes de sécurité pour éviter de retravailler sur une adresse déja éxistante
Foreach ($elements in $group)
{
#Création d'un compteur qui servira de déclencheur à la création des listes de distribution et d'une variable contenant le nom des groupes de sécurité
$compteur = 0
#La variable $resultat est présente dans l'objectif d'une clarification des logs
$resultat = 0
$comparaison = \"$($elements.name)\"
#Comparaison des noms des groupes de distribution avec ceux des groupes de séccurité
Foreach ($elements in $DG)
{
If ($comparaison -eq \"$($elements.name)\"«»)
{
$compteur = $compteur+1 #On incrémente le compteur pour avoir un éléments déterminant la création de la liste de distribution
}
}
#Création d'un groupe selon la valeur retournée par $compteur
If ($compteur -eq 0)
{
#Activation du groupe de distribution associé au groupe de sécurité
Write-Host `n`n\"Tentative de création d'un groupe de distribution\" \"$($comparaison)\"`n
Enable-DistributionGroup -Identity \"$($comparaison)\"
$resultat = $resultat+1
}
}
#Mise à jour des log en cas d'absence de changements effectués
If ($resultat -eq 0)
{
Write-Host `n`n\"Aucun changement n'a été effectué sur les groupes de distribution\"
}
[/code:1]
J'ai essayer de bien l'indenter et de le commenter un maximum pour une compréhension accrue.
\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Lister les groupe universel de sécurité