Question Problème de syntaxe

Plus d'informations
il y a 17 ans 5 mois #2983 par michault
Problème de syntaxe a été créé par michault
Bonjour,

C'est encore moi avec mes problèmes de débutants:blush:
Voilà un script pour récupérer des computers dans l'AD et lister des infos dans un fichier:

[code:1]# Récupérer les ordinateurs du domaine
#Définition des constantes
$ldapQuery = \"(&(objectCategory=computer))\"

$de = new-object system.directoryservices.directoryentry \"LDAP://DC=xxxxxxx,DC=xxx\"
$ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery
$computerlist = $ads.findall()

foreach ($computer in $computerlist) {
$computer.properties.name -like 'PC*' |Out-File C:\PWRSHELL\listPC.txt -Append }

$PCs=Get-Content \"C:\PWRSHELL\listPC.txt\"
foreach ($PC in $PCs) {

$ColItems = get-wmiobject -class \"Win32_NetworkAdapterConfiguration\" `
-ComputerName $PC | where{$_.IpEnabled -match \"True\"}

foreach ($objItem in $colItems) {
$PC, $objItem.IPAddress, $objItem.MACAddress | Format-List | out-file \"c:\PWRSHELL\ipaddress.txt\" -Append -NoClobber
}
}
del \"C:\PWRSHELL\listPC.txt\"[/code:1]

J'ai 2 problèmes:

1°/Je voudrais affiner directement sur le nom des PC dans mon 1er foreach afin de m'éviter de passer par un fichier de travail.
2°/ ma sortie définitive dans le fichier ipaddress.txt ne se présente pas comme je l'attendais.
PCXXXXX
10.XXX.XXX.XXX
xx.xx.xx.xx.xx
PCXXXXX
10.XXX.XXX.XXX
xx.xx.xx.xx.xx

J'aurais voulu
PCXXXXX,10.XXX.XXX.XXX,xx.xx.xx.xx.xx
PCXXXXX,10.XXX.XXX.XXX,xx.xx.xx.xx.xx


En écrivant ce message, je viens de penser que je pourrais utiliser ActiveRolesManagement:whistle: mais cela ne change rien à mes lacunes.

Merci pour votre aide<br><br>Message édité par: Arnaud, à: 21/10/08 17:21

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

Plus d'informations
il y a 17 ans 5 mois #2986 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Problème de syntaxe
Salut,
pour le 1 pb:
[code:1]
foreach ($computer in $computerlist) {
$computer.properties.name -like 'PC*' |Out-File C:«»PWRSHELLlistPC.txt -Append }

$PCs=Get-Content \&quot;C:«»PWRSHELLlistPC.txt\&quot;
foreach ($PC in $PCs) {
[/code:1]
Comme tu programmes en procédurale c'est normale de se retrouver dans cette situation.

Le principe de PowerSehll est l'usage intensif du pipeline, il suffit de concaténer tes 2 instructions/traitements en un seul :
[code:1]
$computerlist|Where { $computer.properties.name -like 'PC*' }|foreach {
la suite... }
[/code:1]
1 - Pour chaque pc : $computerlist
2 - on filtre sur le nom : Where {$computer.properties.name -like 'PC*' }
3- pour chaque pc correspondant aux critères faire : foreach { la suite... }

Le premier segment de pipeline ( 1) est équivalent à une itération.

Pour le second il fait ce que tu lui demandes, afficher 3 objets. Si tu souhaites un formatage particulier tu dois le mettre en place. Et là il y a + manières de faire, la plus simple une concaténation de chaîne. Du coup le format-list n'est plus nécessaire.
Ou encore avec le formatage de la chaine :
[code:1]\&quot;{0} {1} {2}\&quot; -F $PC,$($ColItems.ipaddress),$Colitems.macAddress[/code:1]

Comme le champ IpAddress est un tableau on doit exécuter d'abord une expression
[code:1]$($ColItems.ipaddress)[/code:1]
Sinon sans elle tu reçois le nom du type du contenu du champ et pas le contenu
[code:1]\&quot;{0} {1} {2}\&quot; -F $PC,$ColItems.ipaddress,$Colitems.macAddress[/code:1]


Le formatage de chaine (-F) est plus verbeux mais son adaptation offre, à mon avis, plus de souplesse.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 4 mois #3020 par michault
Réponse de michault sur le sujet Re:Problème de syntaxe
Bonjour,

Je suis désolé mais je ne maitrise pas la syntaxe pour le formatage (-F).


[code:1]Erreur lors de la mise en forme d'une chaîne : Index (zero based) must be greater than or equal to zero and less than the size of the argument list..
Au niveau de C:\PWRSHELL\RetrieveComputerParam.ps1 : 20 Caractère : 24
+ \&quot;{0} {1} {2} {3} {4} {5}\&quot; -F &lt;&lt;&lt;&lt; $objItem.DNSHostName, $($objItem.IPAddress), $objItem.MACAddress, $objItem.DNSServerSearchOrder, $objItem.DNSDomainSuffixSearchOrder[/code:1]
Quelqu'un peut-il me guider?

Merci<br><br>Message édité par: Arnaud, à: 21/10/08 17:20

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

Plus d'informations
il y a 17 ans 4 mois #3024 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Problème de syntaxe
Sans le code en cause difficile de répondre.
D'aprés le message tu indiques 6 éléments mais tu en inséres 5. L'indice débute à zéro:
\&quot;{0} {1} {2} {3} {4}\&quot; -F ...
Il existe un document à ce sujet dans le forum contribution.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 4 mois #3026 par michault
Réponse de michault sur le sujet Re:Problème de syntaxe
Merci pour tout:
:blush: Si en plus j'y mets pas du mien!:whistle:

@+
Christophe

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

Plus d'informations
il y a 17 ans 4 mois #3029 par michault
Réponse de michault sur le sujet Re:Problème de syntaxe
J'abuse :dry:

J'ai un dernier petit problème avec les propriétés suivantes

$($objItem.DNSServerSearchOrder), $($objItem.DNSDomainSuffixSearchOrder)

Mon résultat donne
system.object[]

avec

$objItem.DNSServerSearchOrder, $objItem.DNSDomainSuffixSearchOrder

Mon résultat donne
system.string[]<br><br>Message édité par: chm69, à: 21/10/08 13:08

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

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