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 :

Remote on Active Directory ? [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Points : 627
    Points
    627
    Billets dans le blog
    3
    Par défaut Remote on Active Directory ?
    Bonjour à tous,

    Aujourd'hui je m'en remet à vous pour mon problème après pleins de recherches (et de l'aide en vain sur Stack Overflow) je test ici ^^.
    J'ai dans une entreprise (pour un stage) installé et configuré 2 Windows serveur en 2008 R2. Jusque là, tout va bien.
    On m'en ensuite dit ceci :

    Comme tu vas aller sur chaque serveur peux-tu me donner les admins locaux ?
    Ce que j'ai testé sur mon premier serveur avec cette démarche :

    1. Sur le bureau de mon serveur création d'un fichier "List1.txt" qui contient juste :
    01SPEAI-PROD1
    01SPEAI-PROD2
    02SPHPV-PROD1
    01SLCPTAAP-PROD
    01SLSPSSA-PROD1

    2. Écriture du script PowerShell :

    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
    Write-Host Script to display members of the local -ForegroundColor Green
    Write-Host Administators group of a remote server. -ForegroundColor Green
    Write-Host "`n"
    Write-Host Script is running... Please dont close this command prompt! -ForegroundColor Red
    Write-Host "`n"
    
    Get-Content 'C:\Users\herbautr\Desktop\List1.txt' | ForEach-Object {
    
     $computer = [ADSI]("WinNT://" + $_ + ",computer")
     $group = $computer.PSBase.Children.Find("administrators")
    
     Write-Output "Computer Name : "$computer.Name
     Write-Output "__________________________________"
     Write-Output "Group Name : "$Group.Name
     Write-Output "__________________________________"
    
     $domain = $group.Path.Split("/")[2]
     $string1 = "WinNT://" + $domain + "/" + $_ + "/"
     $string2 = $_ + "/"
     $string3 = "WinNT://"
    
     $members  = ($group.PSBase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"") 
    
     Write-Output "Members : "
     $members
     Write-Output ""
      Write-Output "---------------Next---------------"
    } | Set-Content 'C:\Users\herbautr\Desktop\admins.txt'

    3. En sortie sur mon bureau j'ai bien le fichier "admins.txt" avec ceci :

    Computer Name :
    01SPEAI-PROD1
    __________________________________
    Group Name :
    Administrators
    __________________________________
    Members :
    01SPEAI-PROD1/Administrator
    TEST-PRINCIPAL/Admins du domaine
    TEST-PRINCIPAL/svceri

    ---------------Next---------------
    Computer Name :
    01SPEAI-PROD2
    __________________________________
    Group Name :
    Administrators
    __________________________________
    Members :
    01SPEAI-PROD2/Administrator
    TEST-PRINCIPAL/Admins du domaine
    TEST-PRINCIPAL/svceri

    ---------------Next---------------

    Ainsi de suite pour tous les serveurs que List1.txt contient.
    Note : TEST-PRINCIPAL, TEST remplace le nom de la société soucis de confidentialité

    Venons-en au problème... on m'a demandé de ne plus utilisé de fichier .txt ou .csv sur le bureau pour extraire ces informations, mais de directement passer par l'AD (Active Directory) et là... je ne vois absolument pas comment faire.. j'ai demandé de l'aide et donc écrit des trucs du genre :

    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
    Invoke-Command{
    $members = net localgroup administrators |
     where {$_ -AND $_ -notmatch "commande completed successfully"} |
     select -skip 4
    New-Object PSObject -Property @{
     Computername = $env:COMPUTERNAME
     Group = "Administrators"
     Members=$members
     }
    } -computer AD -HideComputerName |
    Select * -ExcludeProperty RunspaceID
    
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.PageSize = 1000
    $objSearcher.Filter = $strFilter
    $objSearcher.SearchScope = "Subtree"
    
    $colProplist = "name"
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
    
    $colResults = $objSearcher.FindAll()
    
    foreach ($objResult in $colResults)
        {$objItem = $objResult.Properties; $objItem.name}
    Sans obtenir le résultat voulu et sans trop comprendre... quelqu'un pourrait-il m'éclaircir sur comment faire ? Car sur google trop de tutoriels sont consacrés au fait d'ajouter ou manager ou modifier un membre de l'AD mais pas ce que je veux, et la plupart du temps en ligne de commande uniquement.


    EDIT : J'ai retrouvé un fichier qu'on m'a envoyé et on m'a dit de m'inspirer de ceci concernant la partie AD (-SearchBase, les OU, DC, etc..) :

    [PS] Get-ADUser -SearchBase "OU=TEST,DC=test,DC=local" -searchscope subtree -ldapfilter {(&(objectCategory=person)(objectClass=user)(employeeID=*)(mail=*)(cn=*)(userAccountControl:1.2.840.113556.1.4.803:=0))} -properties * | select Surname,GivenName,EmployeeID,Mail | Export-csv -NoTypeInformation -Delimiter ";" -Encoding utf8 c:\exports\users_mail_insee.csv

    Get-ADUser -SearchBase "OU=TEST,DC=test,DC=local" -searchscope subtree -ldapfilter {(&(objectCategory=person)(objectClass=user)(employeeID=*)(mail=*)(cn=*)(!userAccountControl:1.2.840.113556.1.4.803:=2))} -properties * | select sAMAccountName,userPrincipalName,name,distinguishedName,lastLogon,logonCount,title,description,msExchRecipientDisplayType | Export-csv -NoTypeInformation -Delimiter ";" -Encoding utf8 c:\exports_users\nom_prenom_mail.csv
    Au cas où ça pourrait vous inspirez aussi ^^

    Merci d'avance,

    Cordialement Skyxia.

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

  2. #2
    Membre confirmé
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Points : 627
    Points
    627
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    N'ayant pas trouvé de solution, je vais continuer d'utiliser ma liste provenant de mon fichier txt ou CSV après tout ça fonctionne ce n'est juste pas automatisé comme je l'aurais voulu mais pas grave

    Je notifie donc la discussion comme résolue.

    Cordialement, Skyxia.

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    salut Skyxia

    Comme tu vas aller sur chaque serveur peux-tu me donner les admins locaux ?
    la pas de miracle, ton script fonctionne et y a pas vraiment d'autre solution en PowerShell

    puis tu dis
    on m'a demandé de ne plus utilisé de fichier .txt ou .csv sur le bureau pour extraire ces informations, mais de directement passer par l'AD

    EDIT : J'ai retrouvé un fichier qu'on m'a envoyé et on m'a dit de m'inspirer de ceci concernant la partie AD (-SearchBase, les OU, DC, etc..) :
    tu comprend que l'on ne peu pas avoir les info local utilisateurs/groupes dans l'AD ? !!!!
    et donc le Get-ADUser ne te sert à rien !!

    moi je comprend dans la dernière demande que la liste de serveurs doit être généré depuis une liste de serveurs qui ce trouve dans une OU de l'AD et peut être les sous OU

    il faut donc utilisé Get-ADComputer pour ça plutôt que get-aduser

    un detail de plus, les contrôleurs de domaine (serveurs AD) sont en general dans l'OU "Domain Controllers"

    voici a quoi pourrais resemble :
    tu doit renseigné sur la premiere ligne le "DistinguishedName" de l'OU ou ce trouve les serveurs a interrogé
    au minimum le script te renvoie les utilisateurs admin local des DC

    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
    $ouserveurs = "OU=SERVEURS,DC=domaine,DC=lan"
    
    $oucontrollers = Get-ADDomain | foreach { $_.DomainControllersContainer}
    
    $servers = @()
    $servers += Get-ADComputer -Filter * -SearchBase $oucontrollers | foreach { $_.dnshostname }
    $servers += try {Get-ADComputer -Filter {name -eq "srv-epo1"} -SearchBase $ouserveurs | foreach { $_.dnshostname }} catch {}
    
    $script = {
        $ordi = $env:COMPUTERNAME
    
        $computer = [ADSI]("WinNT://" + $ordi + ",computer")
        $group = $computer.PSBase.Children.Find("administrators")
    
        Write-Output "Computer Name : "$computer.Name
        Write-Output "__________________________________"
        Write-Output "Group Name : "$Group.Name
        Write-Output "__________________________________"
    
        $domain = $group.Path.Split("/")[2]
        $string1 = "WinNT://" + $domain + "/" + $ordi + "/"
        $string2 = $ordi + "/"
        $string3 = "WinNT://"
    
        $members  = ($group.PSBase.Invoke("Members") | Foreach-Object {
            $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}
            ) -replace ($string1,$string2) -replace ($string3,"") 
    
        Write-Output "Members : "
        $members
        Write-Output ""
        Write-Output "---------------Next---------------"
        }
    
    Invoke-Command -ComputerName $servers -ScriptBlock $script | Set-Content 'C:\Users\herbautr\Desktop\admins.txt'
    plus besoin de fichier txt ou csv
    l'interrogation ce fait a distance depuis le serveurs AD ou depuis ton poste si tu a les module AD installé
    le fichier généré pourrais être adapter pour être lu comme un tableau dans une feuille excel mais la c'est toi qui vois

  4. #4
    Membre confirmé
    Avatar de Skyxia
    Homme Profil pro
    Ingénieur réseau & sécurité
    Inscrit en
    Mai 2016
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur réseau & sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2016
    Messages : 359
    Points : 627
    Points
    627
    Billets dans le blog
    3
    Par défaut
    tu comprend que l'on ne peu pas avoir les info local utilisateurs/groupes dans l'AD ? !!!!
    Oui je n'arrivais juste pas du tout à formuler et retranscrire ça correctement dans un script -> C'est la 2ème fois de ma vie que je fais du PowerShell donc

    En tout cas je te remercie pour ta réponse tout est beaucoup plus clair, je regarde ça ce soir plus en détail !

    Cordialement, Skyxia.

    Siberattaque : Attaque informatique par un hackeur sibérien.


    Je vous invite à consulter mes billets dans mon blog :
    Cisco IOS & Sécurité basique
    Audit réseaux dans un SI

    [Smartphone] [Android] 8 conseils pour vous sécuriser un minimum !

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

Discussions similaires

  1. [C#] Active directory LDAP
    Par Gauden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 02/05/2005, 13h57
  2. Package permettant d'interroger l'active directory
    Par gracouille dans le forum Modules
    Réponses: 5
    Dernier message: 18/08/2004, 10h59
  3. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  4. Réponses: 4
    Dernier message: 17/05/2004, 09h57
  5. Active directory
    Par m.schar dans le forum Développement
    Réponses: 5
    Dernier message: 22/03/2004, 10h30

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