Auteur de questions
PowerShell - Lister les objet contenu dans une OU

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.
- Déplacé Jean-Sébastien DUCHÊNEMVP mardi 10 décembre 2019 22:04 Mauvais Forum
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"
-
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
-
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
-
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
-
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
-
-
-
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
-
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:
- Se rendre sur la page de la doc MS concernant la version courante (prenons l'exemple de ... Test-Connection, totalement par hasard) : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/test-connection?view=powershell-6
- Dans le bandeau de gauche, tu as "version", tu déroules et tu choisi "previous version"
- Là, tu choisis v3, v4 ou v5.0, et juste en dessous tu saisis la cmdlet que tu cherches.
- Si tu la trouve, ... c'est qu'elle existe.
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
- Modifié Oliv - TheFrog lundi 23 décembre 2019 16:27
-
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
-
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
-
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
-
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.