Question
[Résolu] Exception lors de l'appel de «ToString»
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 1 mois #25003
par Philippe
- quand tu visualise la variable $ReplaceText directement ou par write-host ?
- dans l'AD ?
- autrement ?
Réponse de Philippe sur le sujet Exception lors de l'appel de «ToString» avec «0»
a quel endroit tu ne vois pas le tiret :pareil toujours pas le petit tiret
- quand tu visualise la variable $ReplaceText directement ou par write-host ?
- dans l'AD ?
- autrement ?
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 1 mois #25004
par Philippe
Réponse de Philippe sur le sujet Exception lors de l'appel de «ToString» avec «0»
@Laurent :
c'est une variable qui ne contient rien cas l'attribut quel doit récupéré n'existe pas dans l'AD
le détail ci-dessous :
[code:1]
$UserName = $env:username
$Filter = \"(&(objectCategory=User)(samAccountName=$UserName))\"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADTelephoneMobile = $ADUser.TelephoneMobile
$ADTelephoneMobile.ToString()
Exception lors de l'appel de «ToString» avec «0» argument(s): «L'exception suivante s'est produite lors de la récupération de la représentation sous forme de chaîne de la méthode «
TelephoneMobile»: «La référence d'objet n'est pas définie à une instance d'un objet.»»
Au caractère Ligne:1 : 1
+ $ADTelephoneMobile.ToString()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : ExtendedTypeSystemException
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> Get-Variable ad*
Name Value
----
ADTelephoneMobile
ADTelePhoneNumber {}
ADDisplayName {6ratgus}
ADUser System.DirectoryServices.DirectoryEntry
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $ADTelephoneMobile.GetType()
IsPublic IsSerial Name BaseType
----
True False PSMethod System.Management.Automation.PSMethodInfo
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $ADTelephoneMobile|gm
TypeName : System.Management.Automation.PSMethod
Name MemberType Definition
----
Copy Method System.Management.Automation.PSMemberInfo Copy()
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
Invoke Method System.Object Invoke(Params System.Object[] arguments)
ToString Method string ToString()
IsInstance Property bool IsInstance {get;}
MemberType Property System.Management.Automation.PSMemberTypes MemberType {get;}
Name Property string Name {get;}
OverloadDefinitions Property System.Collections.ObjectModel.Collection[string] OverloadDefinitions {get;}
TypeNameOfValue Property string TypeNameOfValue {get;}
Value Property System.Object Value {get;set;}
[/code:1]
en faite après contrôle la variable qui cause l'erreur est de type System.Management.Automation.PSMethodInfo !!J'ai testé différent cas et je n'ai pas rencontré le message d'erreur affiché ici.
c'est une variable qui ne contient rien cas l'attribut quel doit récupéré n'existe pas dans l'AD
le détail ci-dessous :
[code:1]
$UserName = $env:username
$Filter = \"(&(objectCategory=User)(samAccountName=$UserName))\"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADTelephoneMobile = $ADUser.TelephoneMobile
$ADTelephoneMobile.ToString()
Exception lors de l'appel de «ToString» avec «0» argument(s): «L'exception suivante s'est produite lors de la récupération de la représentation sous forme de chaîne de la méthode «
TelephoneMobile»: «La référence d'objet n'est pas définie à une instance d'un objet.»»
Au caractère Ligne:1 : 1
+ $ADTelephoneMobile.ToString()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : ExtendedTypeSystemException
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> Get-Variable ad*
Name Value
----
ADTelephoneMobile
ADTelePhoneNumber {}
ADDisplayName {6ratgus}
ADUser System.DirectoryServices.DirectoryEntry
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $ADTelephoneMobile.GetType()
IsPublic IsSerial Name BaseType
----
True False PSMethod System.Management.Automation.PSMethodInfo
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $ADTelephoneMobile|gm
TypeName : System.Management.Automation.PSMethod
Name MemberType Definition
----
Copy Method System.Management.Automation.PSMemberInfo Copy()
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
Invoke Method System.Object Invoke(Params System.Object[] arguments)
ToString Method string ToString()
IsInstance Property bool IsInstance {get;}
MemberType Property System.Management.Automation.PSMemberTypes MemberType {get;}
Name Property string Name {get;}
OverloadDefinitions Property System.Collections.ObjectModel.Collection[string] OverloadDefinitions {get;}
TypeNameOfValue Property string TypeNameOfValue {get;}
Value Property System.Object Value {get;set;}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 8 ans 1 mois #25005
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Exception lors de l'appel de «ToString» avec «0»
Merci 6ratgus, j'ai appris quelque chose 
J'ai trouvé ceci qui aborde le sujet.
Ensuite on pourrait ce dire que c'est un bug, mais le code de PS semble s'attendre à ce type de cas.
Les objets provenant de ADSI semble adaptés dans cette classe .
De catcher l'exception [System.Management.Automation.ExtendedTypeSystemException] pourrait couvrir ces cas.
[edit]
Voir aussi .<br><br>Message édité par: Laurent Dardenne, à: 13/02/18 18:32
J'ai trouvé ceci qui aborde le sujet.
Ensuite on pourrait ce dire que c'est un bug, mais le code de PS semble s'attendre à ce type de cas.
Les objets provenant de ADSI semble adaptés dans cette classe .
De catcher l'exception [System.Management.Automation.ExtendedTypeSystemException] pourrait couvrir ces cas.
[edit]
Voir aussi .<br><br>Message édité par: Laurent Dardenne, à: 13/02/18 18:32
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PAWLAK
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 8 ans 1 mois #25006
par PAWLAK
Réponse de PAWLAK sur le sujet Re:Exception lors de l'appel de «ToString» avec «0»
6ratgus écrit:
Bonjour 6ratgus,
Dans la signature dans le mail directement.
Les informations téléphone et mobile s'affichent bien à la ligne mais j'ai pas le tiret entre deux.
J'ai mise le code après et voici ce que ça me donne (le tiret apparaît bien là
:
[code:1]Ligne Directe : 02 32 32 32 32 Ligne Directe : System.DirectoryServices.PropertyValueCollection - Mobile : System.DirectoryServices.PropertyValueCollection : 06 45 45 45 45[/code:1]
et le code :
[code:1]if($ADTelephoneNumber -ne \"\"«»){
$FindText = \"TelephoneNumber\"
$ReplaceText = 'Ligne Directe : '+ $ADTelephoneNumber.ToString()
}
Else{
$FindText = \"TelephoneNumber\"
$ReplaceText = \"\"
}
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
If ($ADMobile -ne \"\"«») {
$FindText = \"Mobile\"
$ReplaceText = 'Mobile : '+ $ADMobile.ToString()
}
Else {
$FindText = \"Mobile\"
$ReplaceText = \"\"
}
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
if($ADTelephoneNumber -ne \"\" -and $ADMobile -ne \"\"«»){
$ReplaceText ='{0} - {1}' -f $ADTelephoneNumber,$ADMobile
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
}[/code:1]<br><br>Message édité par: rico76, à: 14/02/18 08:45
a quel endroit tu ne vois pas le tiret :pareil toujours pas le petit tiret
- quand tu visualise la variable $ReplaceText directement ou par write-host ?
- dans l'AD ?
- autrement ?
Bonjour 6ratgus,
Dans la signature dans le mail directement.
Les informations téléphone et mobile s'affichent bien à la ligne mais j'ai pas le tiret entre deux.
J'ai mise le code après et voici ce que ça me donne (le tiret apparaît bien là
[code:1]Ligne Directe : 02 32 32 32 32 Ligne Directe : System.DirectoryServices.PropertyValueCollection - Mobile : System.DirectoryServices.PropertyValueCollection : 06 45 45 45 45[/code:1]
et le code :
[code:1]if($ADTelephoneNumber -ne \"\"«»){
$FindText = \"TelephoneNumber\"
$ReplaceText = 'Ligne Directe : '+ $ADTelephoneNumber.ToString()
}
Else{
$FindText = \"TelephoneNumber\"
$ReplaceText = \"\"
}
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
If ($ADMobile -ne \"\"«») {
$FindText = \"Mobile\"
$ReplaceText = 'Mobile : '+ $ADMobile.ToString()
}
Else {
$FindText = \"Mobile\"
$ReplaceText = \"\"
}
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
if($ADTelephoneNumber -ne \"\" -and $ADMobile -ne \"\"«»){
$ReplaceText ='{0} - {1}' -f $ADTelephoneNumber,$ADMobile
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
}[/code:1]<br><br>Message édité par: rico76, à: 14/02/18 08:45
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 8 ans 1 mois #25008
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Exception lors de l'appel de «ToString» avec «0»
Peut être as tu un pb d'encodage dans le fichier PS ?
Tu utilises Word pour le rendu de ton mail, je ne pense pas que ce soit un pb lié aux instructions Powershell.
La ligne conseillée renvoie bien le tiret dans PS, en tout cas sur mon poste.
Tu utilises Word pour le rendu de ton mail, je ne pense pas que ce soit un pb lié aux instructions Powershell.
La ligne conseillée renvoie bien le tiret dans PS, en tout cas sur mon poste.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PAWLAK
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 8 ans 1 mois #25009
par PAWLAK
Réponse de PAWLAK sur le sujet Re:Exception lors de l'appel de «ToString» avec «0»
Je ne saurais te répondre, mes compétences dans ce domaine étant limitées.
le faites qu'il remplace les numéros par System.DirectoryServices.PropertyValueCollection - System.DirectoryServices.PropertyValueCollection
Je n'en ai pas la moindre idée !
Ce n'est pas bien grave de toute manière, le principal était le message d'erreur à l'origine.
Là c'est juste une question esthétique. Si je trouve je n'hésiterais pas à mettre l'info.
Merci encore pour votre aide.
le faites qu'il remplace les numéros par System.DirectoryServices.PropertyValueCollection - System.DirectoryServices.PropertyValueCollection
Je n'en ai pas la moindre idée !
Ce n'est pas bien grave de toute manière, le principal était le message d'erreur à l'origine.
Là c'est juste une question esthétique. Si je trouve je n'hésiterais pas à mettre l'info.
Merci encore pour votre aide.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.054 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Exception lors de l'appel de «ToString»