Question
[Résolu] Mauvais usage de la méthode Split()
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 5 mois #5805
par Gabriel
[Résolu] Mauvais usage de la méthode Split() a été créé par Gabriel
Récement Arnaud m'a montré comment correctement me servir de la fonction .split().
j'arrive a m'en servir tant que j'ai une string simple...
Mais je bloque dans son usage avec des objets ramené de l'ad.
Je cherche a générer un CSV avec tout les utilisateur de l'AD et leur adresse SIP (Office communicator) le champs \"msrtcsip-primaryuseraddress\" contient pour chaque utilisateur \"sip:prenom.nom@toto.com\".
Dans le CSV j'aurais souhaité que \"sip:\" ne soit pas mis.
Pour tout ça j'ai recuperer une fonction[code:1]function func_All_AD_Users()
{
#runs against default AD server
$ADQuery =
{
$searcher= New-Object directoryServices.DirectorySearcher([adsi]('GC://'+([adsi]'LDAP://RootDse').RootDomainNamingContext) )
$searcher.filter=\"(&(objectCategory=person)(objectClass=user))\"
#$searcher.filter=\"(&(objectClass=user))\"
#$searcher.filter=\"(msrtcsip-userenabled=true)\"
$searcher.Findall()
}
&$ADQuery | select-object @{Name=\"Distinguished Name\"; Expression = {$_.Properties.item(\"distinguishedname\"«»)}},
@{Name=\"Name\"; Expression = {$_.Properties.item(\"cn\"«»)}},
@{Name=\"SIP Enabled\"; Expression = {$_.Properties.item(\"msrtcsip-userenabled\"«»)}},
@{Name=\"PrimarySIP\"; Expression = {$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»).split(':')[1]}},
@{Name=\"Email\"; Expression = {$_.Properties.item(\"Mail\"«»)}}
@{Name=\"Userid\"; Expression = {$_.Properties.item(\"sAMAccountName\"«»)}}
}
func_All_AD_Users | where { $_.\"SIP Enabled\" -eq '$True' } | Select-Object \"Name\" , \"Primary SIP\" | Export-CSV -Path $fichierEnSortie -Force
[/code:1]
mon probleme j'ai un message d'erreur, a cause du split que j'ai rajouté sur la ligne [code:1] @{Name=\"PrimarySIP\"; Expression = {$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»).split(':')[1]}},
[/code:1]
le message d'erreur
[code:1]Select-Object : Method invocation failed because [System.DirectoryServices.ResultPropertyValueCollection] doesn't conta
in a method named 'split'.
At C:\Temp\import\generate-CSVSIPContacts.ps1:57 char:28
+ &$ADQuery | select-object <<<< @{Name=\"Distinguished Name\"; Expression = {$_.Properties.item(\"distinguishedname\"«»)}
},
+ CategoryInfo : InvalidResult: (System.DirectoryServices.SearchResult:«»PSObject) [Select-Object], Runtime
Exception
+ FullyQualifiedErrorId : PropertyEvaluationNoExpand,Microsoft.PowerShell.Commands.SelectObjectCommand[/code:1]
Comment dois-je m'y prendre pour utiliser corretement split...?
Merci d'avance
Message édité par: tonic8, à: 22/12/09 14:09<br><br>Message édité par: Arnaud, à: 30/12/09 18:44
j'arrive a m'en servir tant que j'ai une string simple...
Mais je bloque dans son usage avec des objets ramené de l'ad.
Je cherche a générer un CSV avec tout les utilisateur de l'AD et leur adresse SIP (Office communicator) le champs \"msrtcsip-primaryuseraddress\" contient pour chaque utilisateur \"sip:prenom.nom@toto.com\".
Dans le CSV j'aurais souhaité que \"sip:\" ne soit pas mis.
Pour tout ça j'ai recuperer une fonction[code:1]function func_All_AD_Users()
{
#runs against default AD server
$ADQuery =
{
$searcher= New-Object directoryServices.DirectorySearcher([adsi]('GC://'+([adsi]'LDAP://RootDse').RootDomainNamingContext) )
$searcher.filter=\"(&(objectCategory=person)(objectClass=user))\"
#$searcher.filter=\"(&(objectClass=user))\"
#$searcher.filter=\"(msrtcsip-userenabled=true)\"
$searcher.Findall()
}
&$ADQuery | select-object @{Name=\"Distinguished Name\"; Expression = {$_.Properties.item(\"distinguishedname\"«»)}},
@{Name=\"Name\"; Expression = {$_.Properties.item(\"cn\"«»)}},
@{Name=\"SIP Enabled\"; Expression = {$_.Properties.item(\"msrtcsip-userenabled\"«»)}},
@{Name=\"PrimarySIP\"; Expression = {$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»).split(':')[1]}},
@{Name=\"Email\"; Expression = {$_.Properties.item(\"Mail\"«»)}}
@{Name=\"Userid\"; Expression = {$_.Properties.item(\"sAMAccountName\"«»)}}
}
func_All_AD_Users | where { $_.\"SIP Enabled\" -eq '$True' } | Select-Object \"Name\" , \"Primary SIP\" | Export-CSV -Path $fichierEnSortie -Force
[/code:1]
mon probleme j'ai un message d'erreur, a cause du split que j'ai rajouté sur la ligne [code:1] @{Name=\"PrimarySIP\"; Expression = {$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»).split(':')[1]}},
[/code:1]
le message d'erreur
[code:1]Select-Object : Method invocation failed because [System.DirectoryServices.ResultPropertyValueCollection] doesn't conta
in a method named 'split'.
At C:\Temp\import\generate-CSVSIPContacts.ps1:57 char:28
+ &$ADQuery | select-object <<<< @{Name=\"Distinguished Name\"; Expression = {$_.Properties.item(\"distinguishedname\"«»)}
},
+ CategoryInfo : InvalidResult: (System.DirectoryServices.SearchResult:«»PSObject) [Select-Object], Runtime
Exception
+ FullyQualifiedErrorId : PropertyEvaluationNoExpand,Microsoft.PowerShell.Commands.SelectObjectCommand[/code:1]
Comment dois-je m'y prendre pour utiliser corretement split...?
Merci d'avance
Message édité par: tonic8, à: 22/12/09 14:09<br><br>Message édité par: Arnaud, à: 30/12/09 18:44
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 16 ans 5 mois #5806
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:mauvais usage de la fonction split
tonic8 écrit:
)
Déjà regarder sur MSDN qu'est-ce que cette classe.
On y lit que c'est une collection, donc accéder à un de ses éléments est un bon début.
Ensuite tu cherches à récupérer une partie d'un objet en un type String, il faut donc soit transformer l'objet en une chaîne ou accéder à un propriété de type chaîne de cet objet.
Essaie qq chose comme :
[code:1]($_.Properties.item(\"msrtcsip-primaryuseraddress\"«»)).PROPERTY.split(':')[1]
#ou
$item=$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»)
$Item.PROPERTY.split(':')[1]
[/code:1]
Mais il faut déjà connaitre quel est le type de l'objet que la méthode item renvoi, pour trouver la propriété à utiliser...
Ce n'est pas une solution, plutot une approche pour comprendre ce qui se passe et s'orienter vers une solution.<br><br>Message édité par: Laurent Dardenne, à: 18/12/09 20:10
Il faut déjà interpréter le message d'erreur qui te dit que la classe [System.DirectoryServices.ResultPropertyValueCollection] ne contient pas la méthode Split (ça c'est facileComment dois-je m'y prendre pour utiliser correctement split...?
Déjà regarder sur MSDN qu'est-ce que cette classe.
On y lit que c'est une collection, donc accéder à un de ses éléments est un bon début.
Ensuite tu cherches à récupérer une partie d'un objet en un type String, il faut donc soit transformer l'objet en une chaîne ou accéder à un propriété de type chaîne de cet objet.
Essaie qq chose comme :
[code:1]($_.Properties.item(\"msrtcsip-primaryuseraddress\"«»)).PROPERTY.split(':')[1]
#ou
$item=$_.Properties.item(\"msrtcsip-primaryuseraddress\"«»)
$Item.PROPERTY.split(':')[1]
[/code:1]
Mais il faut déjà connaitre quel est le type de l'objet que la méthode item renvoi, pour trouver la propriété à utiliser...
Ce n'est pas une solution, plutot une approche pour comprendre ce qui se passe et s'orienter vers une solution.<br><br>Message édité par: Laurent Dardenne, à: 18/12/09 20:10
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 4 mois #5829
par Gabriel
Réponse de Gabriel sur le sujet Re:mauvais usage de la fonction split
Alors j'ai triché
, je l'ai fait autrement ... vu que j'ai un peu tester dans tous les sens en incluant .toString() ou du [string] sans grand succes... (surtout en faisant des tentative sans vraiment comprendre. 
Le resulstat est [code:1]
$fichierCSV=.\toto.csv
function coupe($s) {$s.split(\":\"«»)[1]}
get-QADUser -SearchRoot \"$OU\" -IncludeAllProperties |
where { $_.\"msrtcsip-userenabled\" -eq \"$True\"} |
select-object name,\"msrtcsip-primaryuseraddress\" |
foreach {
$_.\"msRTCSIP-PrimaryUserAddress\"= coupe $_.\"msRTCSIP-PrimaryUserAddress\"
$_
} |
# Sort-Object -Property name |
export-csv $fichierCSV -noTypeInformation -Force -Encoding Unicode
[/code:1]
Le resulstat est [code:1]
$fichierCSV=.\toto.csv
function coupe($s) {$s.split(\":\"«»)[1]}
get-QADUser -SearchRoot \"$OU\" -IncludeAllProperties |
where { $_.\"msrtcsip-userenabled\" -eq \"$True\"} |
select-object name,\"msrtcsip-primaryuseraddress\" |
foreach {
$_.\"msRTCSIP-PrimaryUserAddress\"= coupe $_.\"msRTCSIP-PrimaryUserAddress\"
$_
} |
# Sort-Object -Property name |
export-csv $fichierCSV -noTypeInformation -Force -Encoding Unicode
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 16 ans 4 mois #5830
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:mauvais usage de la fonction split
tonic8 écrit:
[code:1]where { $_.\"msrtcsip-userenabled\" -eq \"$True\"} [/code:1]
\"ça me pique les yeux\"
Soit tu traites un booléen soit une string, mais un mixte des deux ce n'est pas maintenable.
tonic8 écrit:
Ha la sale bête
Cela ce n'est pas gênant, en revanche çaAlors j'ai triché
[code:1]where { $_.\"msrtcsip-userenabled\" -eq \"$True\"} [/code:1]
\"ça me pique les yeux\"
Soit tu traites un booléen soit une string, mais un mixte des deux ce n'est pas maintenable.
tonic8 écrit:
Le pb est plutot là, en gros ça tombe en marche. C'est aussi possible de procéder ainsi, mais tu ne résouds pas le problème, tu repousses sa compréhension. Mais il reste là, tapis dans l'ombre, prêt à bondir !surtout en faisant des tentatives sans vraiment comprendre.
Ha la sale bête
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 4 mois #5836
par Gabriel
hihi, c'est la seule facon que j'ai trouvé pour contourné le problème du \"-\" dans \"msrtcsip-userenabled\". La totalité des champs AD ne contient pas de -, sauf dans Office Communicator qui modifie le schéma de l'ad en rajoutant des champs avec \"-\" (a ma connaissance) en mettant les \"\" Powershell interprete le champs AD correctement sinon il bloque au \"-\"...
Et je sais que le probleme reste tapis dans l'ombre prèt a surgir. j'aurais peut etre un peu plus de temps a lui consacrer... pour lui faire sa fête...
en parlant de fêtes... Bonnes fêtes de fin d'année
Réponse de Gabriel sur le sujet Re:mauvais usage de la fonction split
\"ça me pique les yeux\"
Soit tu traites un booléen soit une string, mais un mixte des deux ce n'est pas maintenable
hihi, c'est la seule facon que j'ai trouvé pour contourné le problème du \"-\" dans \"msrtcsip-userenabled\". La totalité des champs AD ne contient pas de -, sauf dans Office Communicator qui modifie le schéma de l'ad en rajoutant des champs avec \"-\" (a ma connaissance) en mettant les \"\" Powershell interprete le champs AD correctement sinon il bloque au \"-\"...
Et je sais que le probleme reste tapis dans l'ombre prèt a surgir. j'aurais peut etre un peu plus de temps a lui consacrer... pour lui faire sa fête...
en parlant de fêtes... Bonnes fêtes de fin d'année
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 16 ans 4 mois #5838
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:mauvais usage de la fonction split
tonic8 écrit:
Merci, à toi aussi.en parlant de fêtes... Bonnes fêtes de fin d'année
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.045 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Mauvais usage de la méthode Split()