Question Récupération des serveurs dans AD (Résolu)

Plus d'informations
il y a 16 ans 6 mois #959 par bordin
salut,

Je voudrai récupérer uniquement les serveurs Windows 2000 et 2003 dans AD.
J'ai adapté un peu ce bout de code.


[code:1]$sb={ $sb0 = { $root= new-object System.DirectoryServices.DirectoryEntry(\"LDAP://RootDSE\"«»);
$domain=[adsi](\"LDAP://\" + $root.Get(\"defaultNamingContext\"«»));
$search = new-object System.DirectoryServices.DirectorySearcher($domain)
$search.filter = '(objectCategory=Computer)'


$result = $search.FindAll() | where {$_.Properties[\"operatingsystem\"].Item(0) -like \"Windows * Server\"} | foreach-object {
$compAD = $_

$compAD | add-member noteproperty \"Name\" $compAD.Properties[\"name\"].Item(0)
$compAD | add-member noteproperty \"sAMAccountName\" $compAD.Properties[\"samaccountname\"].Item(0)
$compAD | add-member noteproperty \"DNS Name\" \"\"
$compAD | add-member noteproperty \"OS Name\" \"\"
$compAD | add-member noteproperty \"Last Logon\" \"\"

if (!($compAD.Properties[\"dnshostname\"] -eq $null)){
$compAD.\"DNS Name\" = $compAD.Properties[\"dnshostname\"].Item(0)
}

if (!($compAD.Properties[\"operatingsystem\"] -eq $null)){
$compAD.\"OS Name\" = $compAD.Properties[\"operatingsystem\"].Item(0)
}



write-Output $compAD
}
$result }
&$sb0 }
&$sb | Sort-Object -property \"Name\" -descending [/code:1]

mais j'obtiens une erreur et seulement les serveurs 2000. PAs les autres!

Je ne vois pas le bug!

Merci<br><br>Message édité par: Arnaud, à: 27/09/07 21:19

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 mois #962 par Jacques Barathon
Tu écris \&quot;Windows * Server\&quot;, ce qui retourne bien \&quot;Windows 2000 Server\&quot;. Mais as-tu vérifié que le libellé de 2003 correspond à ce schéma? N'est-ce pas plutôt \&quot;Windows Server 2003\&quot;?

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 mois #963 par bordin
Merci Janel, c'est bien çà Windows Server 2003.

Donc J'ai fait un coup avec windows 2000 Server et un autre avec Windows Server 2003.
Je remonte bien les bons serveurs mais toujours un message d'erreur! Comme si il y avait une valeur nulle dans {$_.Properties[\&quot;operatingsystem\&quot;].Item(0).

Que me conseil tu pour récupérer les 2 types de serveurs?
Je ne voulais pas faire çà en 2 passes.

MErci encore!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 mois #964 par bordin
Salut,
Meaculpa! J'ai été trop vite dans ma réponse.:blush:

[code:1]$result = $search.FindAll() | where {$_.Properties[\&quot;operatingsystem\&quot;].Item(0) -eq \&quot;Windows Server 2003\&quot; -or $_.Properties[\&quot;operatingsystem\&quot;].Item(0) -eq \&quot;Windows 2000 Server\&quot;}[/code:1]

Voila ce qu'il fallait faire!

Mais pourquoi j'ai une erreur: Vous ne pouvez pas appeler de méthodes sur une expression ayant la valeur null
?

Merci pour voslumières.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 mois #966 par Jacques Barathon
En principe, en effet on ne peut pas appeler de méthode sur un objet $null. Il faut au moins une instance valide sur laquelle PowerShell peut exécuter la méthode.

Où exactement as-tu l'erreur? Peux-tu nous recopier le message d'erreur dans son intégralité?

Je n'ai pas d'AD sous la main pour tester ton code, j'essaierai plus tard dans la journée.

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 mois #970 par bordin
Salut,

Voila le message d'erreur:
[code:1]Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\ControlSCA\geTsrv.ps1 : 9 Caractère : 75
+ $result = $search.FindAll() | where {$_.Properties[\&quot;operatingsystem\&quot;].Item( &lt;&lt;&lt;&lt; 0) -eq \&quot;Windows Server 2003\&quot; -or $_.
Properties[\&quot;operatingsystem\&quot;].Item(0) -eq \&quot;Windows 2000 Server\&quot;} | foreach-object {[/code:1]

Merci pour ta réponse Janel. Et pendant que j'y suis merci pour ta fameuse ligne de code pour récupérer la taille d'un répertoire!;)

On en apprend tout les jours avec PS!

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.077 secondes
Propulsé par Kunena