Question [Résolu] Exception lors de l'appel de «ToString»

Plus d'informations
il y a 8 ans 1 mois #24953 par PAWLAK
Bonjour à tous,

Je cherche depuis des heures comment résoudre mon problème.

J'ai récupéré un code pour créer des signatures mails en GPO. Les informations sont récupérées via l'AD.
Je souhaiterais afficher le numéro de téléphone tout simplement et en cas ou il n'y en a pas, ne pas l'afficher.

Si jamais le numéro de téléphone est indiqué, cela fonctionne. Hors si il n'y a rien, j'ai un message d'erreur lors de l’exécution du code sous powershell.

Voici mon code

[code:1]
If($ADTelePhoneNumber -ne $null){
$FindText = \"TelephoneNumber\"
$ReplaceText = 'Ligne Directe : '+ $ADTelePhoneNumber.ToString()
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
}
Else{$FindText = \"TelephoneNumber\"
$ReplaceText = \"\"
}
[/code:1]


Et voici l'erreur sous powershell:

[code:1]
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 Y:\TEST\Set-OutlookSignature.ps1:118 : 4
+ if($ADTelephoneMobile.ToString() -ne $null){
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : ExtendedTypeSystemException

[/code:1]


Merci pour votre aide !

Eric<br><br>Message édité par: rico76, à: 15/02/18 11:42

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

Plus d'informations
il y a 8 ans 1 mois #24958 par Laurent Dardenne
Salut,
il est recommandé d'écrire un test portant sur la valeur $null comme ceci :
[code:1]
If($null -eq $ADTelePhoneNumber){
[/code:1]
Pour
[code:1]
$ReplaceText = 'Ligne Directe : '+ $ADTelePhoneNumber.ToString()
[/code:1]
L'usage de ToString est redondant, car ici le premier opérande est une string, l'opérateur '+' implique donc une conversion implicite de l'objet en string par PS.
De plus on ne peut appeler une méthode sur une variable contenant $null.
Ici ne pas utiliser ToString() réglera un problème.

Reste celui du message d'erreur qui semble référencer une méthode ETS (Add-member ou fichier .ps1xml).
Mais là ce n'est que supposition :)

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 1 mois #24961 par PAWLAK
Bonjour Laurent,

Il faut que je remplace ce code ci

[code:1]$ReplaceText = 'Ligne Directe : '+ $ADTelePhoneNumber.ToString()[/code:1]

par

[code:1]If($null -eq $ADTelePhoneNumber){ [/code:1]

C'est bien cela ?

Ce qui donnerais

[code:1]If($null -eq $ADTelePhoneNumber){
$FindText = \&quot;TelephoneNumber\&quot;
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)

}
[/code:1]<br><br>Message édité par: rico76, à: 9/02/18 15:40

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

Plus d'informations
il y a 8 ans 1 mois #24962 par Laurent Dardenne
rico76 écrit:

C'est bien cela ?

Non, on inverse le test et on supprime l'appel à ToString() :
[code:1]
f($null -eq $ADTelePhoneNumber){
$FindText = \&quot;TelephoneNumber\&quot;
$ReplaceText = 'Ligne Directe : '+ $ADTelePhoneNumber
$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll)
}
Else{$FindText = \&quot;TelephoneNumber\&quot;
$ReplaceText = \&quot;\&quot;
}
[/code:1]
Dis nous ce que cela donne à l'exécution

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 1 mois #24965 par PAWLAK
Bonjour Laurent,

J'ai l'erreur suivante lorsque j'utilise le code que tu as donné :

[code:1]Impossible de convertir la valeur en type System.String.
Au caractère Y:\TEST\Set-OutlookSignature.ps1:138 : 5
+ $ReplaceText = 'Mobile : '+ $ADTelephoneMobile[/code:1]

je te remercie

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

Plus d'informations
il y a 8 ans 1 mois #24966 par Laurent Dardenne
Bonjour,
rico76 écrit:

J'ai l'erreur suivante lorsque j'utilise le code que tu as donné :

C'est bien embarrassant :(
Là il faut creuser, peux-tu nous communiquer les infos renvoyées par :
[code:1]
$PSversionTable

$ADTelephoneMobile.Gettype().FullName

$ADTelephoneMobile.|Get-member

$ADTelephoneMobile.ToString

$Error[0]|Select *
[/code:1]
Pour la dernière ligne ce sera pertinent si toutefois ton code ne déclenche pas d'autres erreurs.

En même temps j'ai un doute sur les extraits de code que tu donnes, l'un se déclenche en ligne 118,l'autre en 138. De plus il ne s'agit pas, à priori, de la même variable.
La version d'origine devrait déclencher cette dernière erreur.

Tutoriels PowerShell

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

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