IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Where-Object multicritères (depuis un import-csv) [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut Where-Object multicritères (depuis un import-csv)
    Bonjour,

    J'ai cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ADUser -Properties * | Select-Object Surname,Name,UserPrincipalName, lastLogonTimestamp,DistinguishedName
    qui me retourne une liste d'utilisateur provenant de mon Active Directory.

    J'aimerai filtrer le retour de ma commande sur la propriété DistinguishedName.

    Pour cela je fais un WHERE-OBJECT.

    Cependant, j'aimerai faire un WHERE-OBJECT sur plusieurs critères que voici :

    OuName
    OU=Comptes de Services DMZ
    OU=Comptes de Services
    OU=Saisonniers
    CN=Users
    Ces critères sont dans un fichier CVS, que j'importe via la commande "import-csv"

    Pour faire le filtrage je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Importation du CSV
    $ListExceptionsOu = import-csv -Path $CsvExceptionsOu | Select OuName
    $ListExceptionsOuOuName = ListExceptionsOu.OuName
    
    # Get-ADUser avec filtrage
    Get-ADUser -Properties * |
    Select-Object Surname,Name,UserPrincipalName,lastLogonTimestam,DistinguishedName |
    Where-Object { $_.DistinguishedName -cnotlike "*$ListExceptionsOuOuName,*" }
    Cela ne fonctionne pas.

    Comment puis-je faire ?

    En vous remerciant d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Bonjour,

    J'ai testé comme ceci :

    CSV :
    "OuName"
    "CN=manon xxx,OU=Utilisateurs,OU=xxx,OU=xxx_xxx,DC=xxx,DC=xxx"
    "*OU=Saisonniers,*"
    "OU=Comptes de Services,OU=xxx_xxx,DC=xxx,DC=xxx"

    POWERSHELL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Importation du CSV
    $ListExceptionsOu = import-csv -Path $CsvExceptionsOu | Select OuName
    
    # Get-ADUser avec filtrage
    Get-ADUser -Properties * |
    Select-Object Surname,Name,UserPrincipalName,lastLogonTimestam,DistinguishedName |
    Where-Object { ( $ListExceptionsOu.OuName -cnotlike $_.DistinguishedName) }
    Je trouve bien CN=manon xxx,OU=Utilisateurs,OU=xxx,OU=xxx_xxx,DC=xxx,DC=xxx car la chaine est en entière.
    Par contre pour des chaines partielles, rien. La regex ne fonctionne pas non plus.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Salut,

    Essaie comme ceci

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-ADUser -Properties * |
    Select-Object Surname,Name,UserPrincipalName,lastLogonTimestam,DistinguishedName |
    Where-Object {
        $item = $_
        !($ListExceptionsOu | Where-Object {$item.DistinguishedName -clike $_.OuName})
    }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Merci pour ton aide !

    J'ai légèrement modifier ta proposition pour faciliter le test. J'ai retiré la négation pour inverser le retour de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-ADUser -Properties * |
    Select-Object Surname,Name,UserPrincipalName,lastLogonTimestam,DistinguishedName |
    Where-Object {
        $item = $_
        ($ListExceptionsOu | Where-Object {$item.DistinguishedName -clike $_.OuName})
    }
    En résultat, je ne trouve que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CN=manon xxx,OU=Utilisateurs,OU=xxx,OU=xxx_xxx,DC=xxx,DC=xxx
    Je n'arrive pas à chercher une chaine dans une chaine ou a utiliser des regex.

    En fait, je n'arrive pas à utiliser de regex avec une variable !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Je pense avoir réussi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-ADUser -Properties * |
    Select-Object Surname,Name,UserPrincipalName,lastLogonTimestam,DistinguishedName |
    Where-Object {
        $item = $_
        ($ListExceptionsOu | Where-Object {$item.DistinguishedName -clike "*"+$_.OuName+"*"})
    }
    Cela fonctionne !

    Je vais vérifier les résultats obtenus pour confirmer la solution.

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu as retiré la négation juste pour les tests ? Sinon ce n'est plus de l'exclusion mais de l'inclusion.

    Tu as définit le critère sensible à la casse je ne sais pas si c'est normal.

    "*"+$_.OuName+"*"
    La ça va "matché" tout ce qui contient, je ne suis pas sur que c'est ce que tu souhaites.


    PS : Les vrais regex sont utilisées avec l'opérateur -matchhttps://learn.microsoft.com/fr-fr/po...ng-description

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Oui s'était pour les tests que j'ai supprimé la négation.
    Sur le script final, elle est présente.

    Pour le -like, j'ai aussi supprimé la sensibilité à la casse.

    Ma commande fonctionne parfaitement, encore merci à toi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Souci d'importation de donnée depuis un fichier CSV
    Par zooffy dans le forum VBA Access
    Réponses: 17
    Dernier message: 20/08/2017, 02h15
  2. Réponses: 7
    Dernier message: 01/02/2017, 20h54
  3. Importer des données depuis des fichiers csv dans MySQL
    Par nrpfc dans le forum SQL Procédural
    Réponses: 24
    Dernier message: 09/10/2012, 16h53
  4. Import depuis MySQL via CSV
    Par CinePhil dans le forum Import/Export
    Réponses: 4
    Dernier message: 18/08/2012, 10h56
  5. Réponses: 1
    Dernier message: 29/02/2012, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo