Question Modification description groupes AD

Plus d'informations
il y a 1 an 4 mois #32872 par Damien Berthaud
Bonjour,

Je suis assez débutant en Powershell mais j'ai un sujet a traiter qui est assez complexe pour moi.

On doit modifier la description des groupes AD d'un O.U
Ils sont nommés en "GL_XXX_application" et il faut que je garde que le nom de l'application.

Checker les groupes etc ça va mais réussir à isoler le nom du groupe et enlever des caractères, je ne vois pas du tout comment faire.
Le nom du groupe et nommé pareil mais on ne doit pas le modifier donc je ne peux pas prendre le nom du groupe pour le mettre sur la description...

Si quelqu'un pouvez m'aiguiller.

Merci beaucoup à vous

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32873 par Laurent Dardenne
Salut,
une solution basée sur une expression régulière (regex) :
$s="GL_XXX_application"
if ($s -match '^(?<partie1>.*?)_(?<partie2>.*?)_(?<partie3>.*?)$')
{$matches}
else
{ Write-error "'description hors norme : '$s'" }

#$matches renvoie une hashtable:
# Name                           Value
# ----                           -----
# partie3                        application
# partie1                        GL
# partie2                        XXX
# 0                              GL_XXX_application
$matches.partie3

Mais le problème est de connaitre la convention de nommage pour définir correctement la regex et savoir que faire pour les noms de groupes qui ne respectent pas cette convention.
note : tu peux renommer les noms de capture 'partie1' etc.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32875 par Damien Berthaud
O_o c'est magique ! il faut que je me penche sur les regex pour ma culture (si tu as des sites ;) )

Effectivement j'en ai qui ont 5 parties et d'autres 6... j'ai essayé un like à la place du match mais non

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois - il y a 1 an 4 mois #32876 par Laurent Dardenne
>> j'ai essayé un like à la place du match mais non
L'opérateur -Like recherche une correspondance ou pas, et c'est tout.
Une regex peut renvoyer un ou + groupes, contenir des alternatives, effectuer une recherches débutant par la fin (sous dotnet), des conditions, être sensible ou non à la casse,...
Bref rien à voir :-)

La doc C#
learn.microsoft.com/fr-fr/dotnet/standar...uage-quick-reference

et celui-ci, niveau avancé, mais explique la notion de consommation dans une regex :
stormimon.developpez.com/dotnet/expressions-regulieres/

>>Effectivement j'en ai qui ont 5 parties et d'autres 6
Reste à connaitre pour chaque cas l'emplacement du texte que tu comptes extraire.
De plus il faut s'assurer que le délimiteur '_' est bien un délimiteur et qu'on ne le retrouvera pas dans du texte.

Tutoriels PowerShell
Dernière édition: il y a 1 an 4 mois par Laurent Dardenne.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois - il y a 1 an 4 mois #32877 par Damien Berthaud
>> Reste à connaitre pour chaque cas l'emplacement du texte que tu comptes extraire.
Hum je vois. enfaite, des groupes d'applications ont 5 parties GL_APP_SCCM_APP_application et d'autres où la version à changée, sont nommées GL_APP_SCCM_APP_application_M1. donc dans tous les cas, c'est la cinquième partie qu'il me faut mais si je met 6 parties, le remplacement part en live et il me colle plus la bonne "partie" sur la description de ceux qui n'en n'ont que 5...

Ne serait-ce pas plus simple de supprimer le début (16 caractères) et la fin (3 caractères SEULEMENT si "_M*" existe ? (oui car il y a des _M1, _M2 etc se serait trop facile sinon :p )

>>De plus il faut s'assurer que le délimiteur '_' est bien un délimiteur et qu'on ne le retrouvera pas dans du texte.
'_' est bien un délimiteur et seulement un délimiteur dans le nommage des groupes

Voilà ce que je tente pour le moment :

[:code]
    If ($s -contains '_M*')
        {
            $s1 = $s.substring(16,$s.length -16)
            $s2 = $s1.substring(0,$s1.length -3)
            Set-ADGroup $svGroup -description $appli.substring(0,$s1.length -3)
        }
    else
        {
            continue
        }
[:code]

mais il ne trouve pas le _M* pour le moment
Dernière édition: il y a 1 an 4 mois par Damien Berthaud.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32880 par Laurent Dardenne
>>Ne serait-ce pas plus simple de supprimer le début (16 caractères) et la fin (3 caractères SEULEMENT si "_M*" existe ? (oui car il y a des _M1, _M2 etc se serait trop facile sinon :p )
Peut être, mais je ne connais pas ton environnement, ni les données à analyser.

Une solution :
$ErrorView='CategoryView'

$T='Hors norme_test','GL_APP_SCCM_APP','GL_APP_SCCM_APP_applicationUN','GL_APP_SCCM_APP_applicationDEUX_M1'
Foreach ($GroupName in $T) {

    # ((?<Postfixe>_.*){0,1})$ : Capture nommée optionnelle ({0,1}), présente en fin de chaîne ('$').

  if ($GroupName -match '^(?<partie1>.*?)_(?<partie2>.*?)_(?<partie3>.*?)_(?<partie4>.*?)_(?<Application>.*?)((?<Postfixe>_.*){0,1})$')
  {
    #$matches
    Write-host "Application : '$($matches.Application)'"

      # ici $Matches.0 = $groupName
    If ($matches.postFixe -ne $null)
    { write-warning "postfixe ('$($matches.Postfixe)') présent pour '$($Matches.0)'" }
  }
  else
  { Write-Error -Message 'Nommage de groupe hors norme' -Category InvalidData -TargetObject $GroupName }
}

>>mais il ne trouve pas le _M* pour le moment
L'opérateur -Contains ne gère pas les jokers, comme -Like le propose.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena