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 :

Recherche string dans une variable [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut Recherche string dans une variable
    Bonjour !

    J'ai actuellement un script qui me permet d'avoir la liste des membres du groupe administrateur local. Mais maintenant je dois trouver comment vérifier si tout les membres obligatoires sont présents(6 membres obligatoires). Par exemple pour "SCCM_ClientPush_GL". Mais j'ai commencé le Powershell y a deux semaines et la je suis bloqué

    Si quelqu'un sait comment trouver une chaine de caractères dans une variable je suis preneur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    # Liste groupe local administrateurs  
    Write "---------------------------------------------"
    #Choix du groupe 
    $localgroupName = "Administrateurs"  
    # "." Signifiant que le script est actif uniquement en local 
    $computerName = "."  
      
     
        # Récupération des groupes concernant le nom de la machine
        $group = [ADSI]("WinNT://$computerName/$localGroupName,group")  
      
        $members = @()  
        $Group.Members() |  
        % {  
            $AdsPath = $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)  
            # Membre du groupe Domaine qui vont avoir un ADSPath égales à WinNT://DomainName/UserName.  
            # Comptes local qui vont avoir la meme valeur que  WinNT://DomainName/ComputerName/UserName.  
            $a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)  
            $name = $a[-1]  
            $domain = $a[-2]  
            $class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)  
      
            $member = New-Object PSObject  
            $member | Add-Member -MemberType NoteProperty -Name "Name" -Value $name  
            $member | Add-Member -MemberType NoteProperty -Name "Domain" -Value $domain  
            $member | Add-Member -MemberType NoteProperty -Name "Class" -Value $class  
      
            $members += $member  
        } 
    
    	foreach ($line in $members) {
        if ($line -eq 'SCCM_ClientPush_GL') {  
            $compte1="Oui"  
        }  
        else{  
    		$compte1="Non"
        }  
    	}
    	$compte1| out-file C:\TEMP\other.txt -force

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 47
    Par défaut
    en fait il faut juste que tu teste le champ name de la variable $member.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($line in $members) {
        if ($line.name -eq 'SCCM_ClientPush_GL') {
              code
    }

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut
    Merci pour la rapidité de la réponse mais malheureusement il ne le trouve toujours pas et m'affiche donc "Non".

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 47
    Par défaut
    je ne vois pas trop ou tu va avec ton script mais une chose est sur ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $compte1| out-file C:\TEMP\other.txt -force
    est hors de la boucle foreach donc la valeur de ta variable $compte1 correspond a la dernière valeur qu'elle a prise dans la boucle.
    Il est donc possible qu'elle ai été a "oui" a un moment et qu'elle sorte de ta boucle en "non"
    essaye comme ca tu vas comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    # Liste groupe local administrateurs  
    Write "---------------------------------------------"
    #Choix du groupe 
    $localgroupName = "Administrateurs"  
    # "." Signifiant que le script est actif uniquement en local 
    $computerName = "."  
      
     
        # Récupération des groupes concernant le nom de la machine
        $group = [ADSI]("WinNT://$computerName/$localGroupName,group")  
      
        $members = @()  
        $Group.Members() |  
        % {  
            $AdsPath = $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)  
            # Membre du groupe Domaine qui vont avoir un ADSPath égales à WinNT://DomainName/UserName.  
            # Comptes local qui vont avoir la meme valeur que  WinNT://DomainName/ComputerName/UserName.  
            $a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)  
            $name = $a[-1]  
            $domain = $a[-2]  
            $class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)  
      
            $member = New-Object PSObject  
            $member | Add-Member -MemberType NoteProperty -Name "Name" -Value $name  
            $member | Add-Member -MemberType NoteProperty -Name "Domain" -Value $domain  
            $member | Add-Member -MemberType NoteProperty -Name "Class" -Value $class  
      
            $members += $member  
        } 
    
    	foreach ($line in $members) {
        if ($line.name -eq 'SCCM_ClientPush_GL') {
            $compte1="oui"
            $compte1| Out-File C:\TEMP\other.txt -force
        }  
        else{  
    		$compte1="Non"
        }
        Write-Host $compte1  
    	}
    tu pourras ensuite viré la ligne Write-Host $compte1 qui te permet de voir toutes les valeurs que $compte1 prend dans ta boucle foreach (le test de chaque compte)

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BeN0o8 Voir le message
    je ne vois pas trop ou tu va avec ton script
    Dans les difficultés, comme souvent lorsqu'on débute.

    Je suis sur le fond d'accord avec tes remarques, mais (oui il y en a un ;-) ) la construction de collection est préférable.
    C'est à dire que le traitement doit être scindé en deux passes, la première construit la collection des comptes manquant (l'objectif), la seconde la construction du rapport.

    Ainsi, en cas de correction de la situation trouvée, la collection sera utilisée dans un second traitement : ajouter les comptes manquants.

    Pour la recherche des comptes manquant mieux vaut utiliser Compare-Object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    # Liste groupe local administrateurs  
    Write "---------------------------------------------"
     #Choix du groupe 
    $localgroupName = "Administrateurs"  
    
     # "." Signifiant que le script est actif uniquement en local 
    $computerName = "."  
    
    
    # Récupération des groupes concernant le nom de la machine
    $Groups = [ADSI]("WinNT://$computerName/$localGroupName,group")  
    
    $Members = @(
     $Groups.Members() |  
     Foreach {  
        $AdsPath = $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)  
        # Membre du groupe Domaine qui vont avoir un ADSPath égales à WinNT://DomainName/UserName.  
        # Comptes local qui vont avoir la meme valeur que  WinNT://DomainName/ComputerName/UserName.  
        $a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)  
        $name = $a[-1]  
        $domain = $a[-2]  
        $class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)  
    
        New-Object PSObject|  
         Add-Member -MemberType NoteProperty -Name "Name" -Value $name -PassThru|  
         Add-Member -MemberType NoteProperty -Name "Domain" -Value $domain -PassThru|  
         Add-Member -MemberType NoteProperty -Name "Class" -Value $class -PassThru
          
     }#foreach
    )#Construit tjr un tableau  
    
    #!!! Fin de la première passe
    
    #Listes des comptes devant exister
    $Mandatory=@(
     (New-Object PSObject| 
      Add-Member -MemberType NoteProperty -Name "Name" -Value 'Un' -PassThru),
    (New-Object PSObject| 
      Add-Member -MemberType NoteProperty -Name "Name" -Value 'Deux' -PassThru),
    (New-Object PSObject| 
      Add-Member -MemberType NoteProperty -Name "Name" -Value 'Administrateur' -PassThru)
    )
    
    #Renvoi les comptes existant et ceux à créer
    Compare-Object $Mandatory $Members -property Name -IncludeEqual
    
    #Renvoi ceux à créer dont la propriété SideIndicator égale à '<=' $AccountToCreate=Compare-Object $Mandatory $Members -property Name|
                      Where {$_.SideIndicator -eq '<='}
    
    $AccountToCreate|
     Foreach {
       Write-Warning "Ce compte doit être créé: $($_.Name)"
     }
    # AVERTISSEMENT : Ce compte doit être créé: Un
    # AVERTISSEMENT : Ce compte doit être créé: Deux

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut
    Merci pour cette aide précieuse ! J'y vois déja plus clair

    Donc suite à votre aide j'ai fais un code qui me permet de connaitre l'éxistence de certains membres du groupe administrateur local et d'enregistrer tout ça dans une base de donnée. Maintenant le problème est de connaitres les autres membres pour les répertorier. Les membres que j'appel "éxotiques" en gros ceux qui ne doivent pas etre la. Et après plusieurs tentives toujours rien Si quelqu'un a une piste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    # Récupération du nom d'utilisateur
    $IdUser = [Environment]::UserName
    # Récupération du nom de la machine
    $NomCalif = [Environment]::MachineName 
    
    #Choix du groupe 
    $localgroupName = "Administrateurs"  
    # "." Signifiant que le script est actif uniquement en local 
    $computerName = "."  
      
     
        # Récupération des groupes concernant le nom de la machine
        $group = [ADSI]("WinNT://$computerName/$localGroupName,group")  
      
        $members = @()  
        $Group.Members() |  
        % {  
            $AdsPath = $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)  
            # Membre du groupe Domaine qui vont avoir un ADSPath égales à WinNT://DomainName/UserName.  
            # Comptes local qui vont avoir la meme valeur que  WinNT://DomainName/ComputerName/UserName.  
            $a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)  
            $name = $a[-1]  
            $domain = $a[-2]  
            $class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)  
      
            $member = New-Object PSObject  
            $member | Add-Member -MemberType NoteProperty -Name "Name" -Value $name  
            $member | Add-Member -MemberType NoteProperty -Name "Domain" -Value $domain  
            $member | Add-Member -MemberType NoteProperty -Name "Class" -Value $class  
      
            $members += $member  
        } 
    #Recherche membre SCCM_ClientPush_GL
    	$compte1="Non"
    	
    	foreach ($line in $members) {
        if ($line.name -eq 'SCCM_ClientPush_GL') {
            $compte1="Oui"
        }  
        else{  
        }
    	}
    
    
    #Recherche membre DSIT_COMMUN_CSCTI_poste_Adm_GL
    	$compte2="Non"
    
    	foreach ($line in $members) {
        if ($line.name -eq 'DSIT_COMMUN_CSCTI_poste_Adm_GL') {
            $compte2="Oui"
        }  
        else{  
        }
    	}
    #Recherche membre NT_RG_Poste_Adm_GG 
    	$compte3="Non"
    	
    	foreach ($line in $members) {
        if ($line.name -eq 'NT_RG_Poste_Adm_GG') {
            $compte3="Oui"
        }  
        else{  
        }
    	}
    #Recherche membre NT_Poste_Adm_GG 
    	$compte4="Non"
    	
    	foreach ($line in $members) {
        if ($line.name -eq 'NT_Poste_Adm_GG') {
            $compte4="Oui"
        }  
        else{  
        }
    	}
    #Recherche membre Domain Admins 
    	$compte5="Non"
    	
    	foreach ($line in $members) {
        if ($line.name -eq 'Domain Admins') {
            $compte5="Oui"
        }  
        else{  
        }
    	}
    #Recherche membre Administrateur
    	$compte6="Non"
    	
    	foreach ($line in $members) {
        if ($line.name -eq 'Administrateur') {
            $compte6="Oui"
        }  
        else{  
        }
    	}
    
    #Insertion BDD
    #Paramètres serveur
    $serverName = "*********\*********" 
    $databaseName = "*********"
    #Utilisateur et password
    $user ="*****"
    $password = "*******"
    #Requete SQL 
    $Query = "INSERT INTO infopc VALUES ('$($NomCalif)','$($IdUser)','$($(get-date -f yyyy-MM-dd))','$($compte1)','$($compte2)','$($compte3)','$($compte4)','$($compte5)','$($compte6)','','','','')"
    
    $Connection = New-Object System.Data.SQLClient.SQLConnection
    $Connection.ConnectionString ="Server=$serverName;user=$user;password=$password;Database=$databaseName;pooling=false;"
    #Ouverture connection
    $Connection.Open()
    #Création nouvelle commande SQL
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Connection
    #Exécution du de la requete
    $cmd=New-Object system.Data.SqlClient.SqlCommand($Query,$Connection)
    $ds=New-Object system.Data.DataSet
    $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
    [void]$da.fill($ds)
    #Fermeture connection
    $Connection.Close()
    # $ds.Tables

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

Discussions similaires

  1. [XL-2007] recherche d'un mot dans une variable de type string
    Par canichon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/04/2013, 13h45
  2. Recherche d'un mot dans une variable string
    Par bataviar dans le forum Débuter
    Réponses: 8
    Dernier message: 27/05/2008, 14h10
  3. [vb.net]recherche "précise" dans une variable
    Par skaraa dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/09/2007, 17h00
  4. recherche dans une variable String
    Par vallgui dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 30/10/2006, 11h32
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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