none
PowerShell - Lister les objet contenu dans une OU RRS feed

  • Question

  • Bonjour,

    Je cherche à réaliser un script PowerShell me permettant de récupérer/lister les éléments contenu dans une OU de mon AD.

    Concrètement, je cherche à extraire une liste (format .txt) des PC contenues dans mon OU PC.

    Mes premières recherches m'oriente vers l'utilisation de la commande Get-ADObject.

    Pouvez-vous me conseiller sur la façon de réaliser mon script.

    Merci.

    mercredi 4 décembre 2019 10:13

Toutes les réponses

  • Bonjour,

    Get-ADObject -Filter * -SearchBase 'OU=Computers,DC=mylab,DC=local' | Select-Object name | Out-File -FilePath "C:\Computers.txt"



    "Vote or mark as answer if you think useful" "Marquer comme réponse les réponses qui ont résolu votre problème"




    • Modifié F.ABASSI mercredi 4 décembre 2019 10:24
    • Proposé comme réponse F.ABASSI mercredi 4 décembre 2019 11:01
    mercredi 4 décembre 2019 10:21
  • Merci pour cette réponse.

    J'ai réalisé un script :

    import-module activedirectory
    
    $DC=(((gwmi WIN32_ComputerSystem).Domain).split("."))[0]
    $centrale=(((gwmi WIN32_ComputerSystem).Domain).split("."))[1]
    
    $Computer = Get-ADComputer -SearchBase "OU=OU-PC-Platine,OU=OU-Clients,DC=$DC,DC=$centrale,DC=xxxx,DC=xxx"  -Filter *
    
    
    $ping = new-object System.Net.NetworkInformation.Ping
     
    # Loop each DC                        
    ForEach($Compute in $Computer)
    {  
        [string]$Name = $Compute.Name 
         #write-host "La platine $Name est sur le réseaux."
    
        $reply = $ping.send($Name)
        if ($reply.status –eq “Success”)
        {
            write-host "La platine $Name est sur le réseaux."
        }
                             
    }

    Le probléme est que j'ai une erreur : 

    PS D:\Temp\PS1> D:\Temp\PS1\Liste_PC.ps1
    Exception calling "Send" with "1" argument(s): "An exception occurred during a Ping request."
    At D:\Temp\PS1\Liste_PC.ps1:20 char:5
    +     $reply = $ping.send($Name)
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : PingException

    Pouvez-vous m'aider sur ce probléme ?

    Merci


    mercredi 4 décembre 2019 11:38
  • Bonjour Toto.R

    Gestion des erreurs de ta commande $ping non fait.

    Je ne sais pas comment résoudre ce avec des classes .net, mais tu peux utiliser la comdlet native Test-Connection

    Exemple :

    foreach ($computer in $computers)   

    {   

    [string]$Name = $Computer.Name    

    $Reply = Test-Connection $Name -ErrorAction SilentlyContinue -count 1 | Select-Object -Property StatusCode   

    If ($reply.Status -eq "Success")       

    {

    Write-Host "la machine $Name est en ligne"       

    }   

    else{       

    Write-Host "la machine $Name est Hors-ligne"       

    }   

    }

    Cordialement

    Olivier

    mercredi 4 décembre 2019 12:08
  • Bonjour, comme indiqué "Oliv - TheFrog" vous pouvez utiliser la commande Test-connection 

    + Vous pouvez ajouter cette commande pour vérifier si les computers sont actifs:

    Get-ADComputer -Filter {enabled -eq $true} -properties *|select Name, DNSHostName


    "Vote or mark as answer if you think useful" "Marquer comme réponse les réponses qui ont résolu votre problème"


    • Modifié F.ABASSI mercredi 4 décembre 2019 12:59
    mercredi 4 décembre 2019 12:59
  • Merci pour votre aide.

    J'ai modifié le script en fonction de vos recommandations.

    $ping = new-object System.Net.NetworkInformation.Ping
    
    
    foreach ($computer in $computers)    
         {    
         [string]$Name = $Computer.Name     
         $Reply = Test-Connection $Name -ErrorAction SilentlyContinue -count 1 | Select-Object -Property StatusCode    
         If ($reply.Status -eq "Success")       
             {
             Write-Host "la machine $Name est en ligne"         
             }    
          else{        
              Write-Host "la machine $Name est Hors-ligne"     
              }    
         }
     

    Je n'ai plus d'erreurs mais je n'ai pas de retour "Write-Host".

    Avez-vous une explication ?

    Merci

    

    mercredi 4 décembre 2019 13:55
  • Je viens de trouver mon erreur, mauvaise syntaxe lors de la déclaration de ma variable $Computers.

    Merci pour votre aide.

    mercredi 4 décembre 2019 14:03
  • service, comme on dit dans l'est de la France (de l'autre côté des Vosges)

    mercredi 4 décembre 2019 14:25
  • Bonjour,

    Je me permets de relancer le sujet.

    Je dois effectuer un script permettant de récupérer les PC contenu dans une OU et faire un ping pour vérifier leurs présences sur le réseau (d'ou mes questions précédentes ^^).

    Par contre, je n'avais pas fait attention à l'environnement de prod sur lequel le script serait utilisé.

    La version de powerhell est 5.0 sur les serveurs en prod :

    PS D:\Temp\PS1> $PsVersionTable
    
    Name                           Value                                                                                                
    ----                           -----                                                                                                
    PSVersion                      5.0.10586.117                                                                                        
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                              
    BuildVersion                   10.0.10586.117                                                                                       
    CLRVersion                     4.0.30319.42000                                                                                      
    WSManStackVersion              3.0                                                                                                  
    PSRemotingProtocolVersion      2.3                                                                                                  
    SerializationVersion           1.1.0.1      

    Je n'ai pas la possibilité d'upgrade la version de powershell.

    Et je trouve difficilement de la doc sur "Test-Connection ou "System.Net.NetworkInformation.Ping" pourriez-vous m'indiquer la bonne marche à suivre pour rendre le script suivant fonctionnel sur powershell 5.0 ?


    $DC=(((gwmi WIN32_ComputerSystem).Domain).split("."))[0]
    $centrale=(((gwmi WIN32_ComputerSystem).Domain).split("."))[1]
    $Computers = Get-ADComputer -SearchBase "OU=OU-PC-Platine,OU=OU-Clients,DC=$DC,DC=$centrale,DC=leclerc,DC=dnsi"  -Filter * 

    $ping = new-object System.Net.NetworkInformation.Ping foreach ($computer in $computers) { [string]$Name = $Computer.Name $Reply = Test-Connection $Name -ErrorAction SilentlyContinue -count 1 | Select-Object -Property StatusCode If ($reply.Status -eq "Success") { Write-Host "la machine $Name est en ligne" } else{ Write-Host "la machine $Name est Hors-ligne" } }

    Merci

    lundi 23 décembre 2019 11:16
  • Bonjour Toto.R

    La cmdlet Test-Connection existe bien en version  PS 5.0, tu ne devrais pas avoir de pb.

    Pour vérifier par toi-même si une cmdlet existe dans telle ou telle version, voici la marche à suivre:

    Attention, il n'est pas toujours inutile de regarder le fonctionnement d'une cmdet dans une version donnée de PS. Parfois, pas ouvent mais parfois, certains paramètres n'existaient pas dans le premières versions de la cmdlet et ont été ajoutés plus tard.

    Olivier

    lundi 23 décembre 2019 16:21
  • Même méthode pour System.Net.NetworkInformation.ping qui existe depuis au moins la version 3 de .Net. Donc pas de pb.

    https://docs.microsoft.com/fr-fr/dotnet/api/system.net.networkinformation.ping?view=netframework-4.5

    Tu as écris que tu n'a pas la possiblité d'upgrader Powershell. Je ne vois pas pourquoi, pourrais-tu expliquer ?

    Windows Powershell, littérallement Windows Management Framework (WMF) dépend de Windows .Net. Plusieurs versions de Windows .Net peuvent coexister sur la même machine (3.5, 4, 4.5 et sup) sans pb?


    Olivier

    lundi 23 décembre 2019 16:58
  • Bonjour,

    je pense que si vous utilisez la propriété récupérée (StatusCode) au lieu de status, cela fonctionnera beaucoup mieux !

         If ($reply.StatusCode -eq 0)      

    Attention, le résultat est "numérique".

    0 indique un résultat correct (Success)

    StatusCode est vide si l'ordinateur n'est pas connu.

    A bientôt,


    Thierry DEMAN-BARCELO. Offce Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    lundi 23 décembre 2019 17:18
  • Oh la belle boulette de ma part !

    Désormais Thierry on te connaitra sous le nom glorieux de "Regard Perçant de l'Aigle qui nous regarde du Haut des Montagnes" (je sais c'est long mais le Navarro n'est pas très concis en traduction française). :-)

    Passes de bonnesfêtes de fin d'année, mais pas trop d'excès quand même, à nos âges canoniques, nous faut des jours pour nous en remettre.

    Olivier

    lundi 23 décembre 2019 17:30
  • Bonjour,

    Je vous remercie pour vos réponses.

    Olivier, je n'ai pas la possiblité/autorisation d'upgrade la version de powershell sur les serveur de prod de mon autorisation (le bloquage est plus hiérarchique que technique).

    Passé de bonnes fêtes ^^

    Cordialement.

    mardi 24 décembre 2019 09:27