Bonjour.
J'ai testé pas de choses vues sur le net mais je n'arrive pas à avoir une date du jour au format Lundi 5 février 2018.
Quelle astuce j'ai loupée ?
Version imprimable
Bonjour.
J'ai testé pas de choses vues sur le net mais je n'arrive pas à avoir une date du jour au format Lundi 5 février 2018.
Quelle astuce j'ai loupée ?
Salut,
sans le code ni les données utilisées ce n'est pas aisé de répondre.
Vérifie déjà que ton code s'exécute dans une session PS avec la culture Fr (Get-Culture).
Et pour ceci:
La date saisie est effectivement considérée comme étant au format US qui est celui par défaut.Code:
1
2
3
4
5
6
7
8
9 Get-Culture #LCID Name DisplayName #---- ---- ----------- #1036 fr-FR Français (France) [datetime]$D='06/02/2018' $d #samedi 2 juin 2018 00:00:00
Par contre ceci fonctionne :
Code:
1
2
3
4 $D='06/02/2018' -as [datetime] $d #mardi 6 février 2018 00:00:00
Pour le format de date, il me fallait JJ/MM/AAAA, mais j'ai maintenant :
AvecCode:
1
2 Cannot convert value "2018-02-05" to type "System.Int32". Error: "Input string was not in a correct format."
Code:+ ($DataSetMessage.tables[0].rows[$i]["jour"]) + " : "
Sans le code d'affectation, ni le type de la donnée je ne saurais t'aider.
A priori tu affectes une valeur incorrecte pour une variable typée:
Code:
1
2 [int]$D='2018-02-05' Cannot convert value "2018-02-05" to type "System.Int32". Error: "Le format de la chaîne d'entrée est incorrect."
Bonsoir.
Je ne sais pas ce qu'est le code d'affectation.
Je vais reprendre : Mon jour vient d'une BDD au format datetime, dans ma requête, je pensais l'avoir caster avec :Mais effectivement j'ai plusieurs soucis, peut être déjà un warning auquel je n'ai pas trop prêté attention :Code:CAST(CAST(date_debut_message AS DATE)AS NVARCHAR(10)) as jour
J'utiliseCode:
1
2
3
4 WARNING: The names of some imported commands from the module 'sqlps' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
peut être vaut t-il mieux que j'utilise la méthode :Code:$smtpClient.Send($message)
D'ailleurs comment s'appelle ces 2 méthodes ?Code:Send-MailMessage -To $To -From $From -Subject "test" -SmtpServer $SMTPServer -Body $body -Port $SMTPPort -UseSsl -Credential $Credential
Je te remercie beaucoup de ton aide, j'ai déjà beaucoup appris, il me reste ces quelques trucs en cours, ce serait super si tu pouvais m'accompagner en me reprenant si je ne donne pas les bonnes infos.
C'est ceci, on affecte '2018-02-05' à la variable $D
C'est la ligne complète qui est utile ici pas un fragment, on ne construit pas un puzzle ;-)Code:
1
2 [int]$D='2018-02-05'
Tu devrais récupérer une chaine unicode, reste à savoir si le format de date côté serveur est celui de la langue Fr.
Dans le module sqlps un nom de cmdlet utilise un verbe qui n'est pas approuvé, ce n'est un problème pour ton code.Citation:
Envoyé par 69Pierre
Et ici c'est l'auteur(e) du module qui doit régler ce problème.
Pas sur de comprendre, $smtpClient est une instance de classe dotnet (un objet) et Send-MailMessage un cmdlet.Citation:
Envoyé par 69Pierre
Si tu te mets à la place de celui/celle qui peut te répondre, ce ne sera pas nécessaire.Citation:
Envoyé par 69Pierre
C'est à toi de nous aider à t'aider :-)
Pour en revenir à ton pb, la ligne suivante provoque le même message d'erreur :
Je suppose donc que ton code tente de placer une valeur d'un type incompatible dans une variable typée.Code:
1
2 [int]$D='2018-02-05'
Ceci
Affecte la valeur '2018-02-05' de type string dans une variable $D qui est typé en un entier à l'aide de l'attribut de type [INT].Code:
1
2 [int]$D='2018-02-05'
le code suivant fonctionne car 10 est un entier :
mais tu peux aussi avoir ceci qui déclenche la même erreur (seconde supposition) :Code:
1
2 [int]$D=10
Ici PS se base sur l'opérande gauche la valeur 10,que PS considère comme étant de type entier, PS cast implicitement le second opérande en un entier '2018-02-05' ce qui provoque l'erreur.Code:
1
2 10+'2018-02-05'
A moins faire une soupe, on ne peut donc additionner des choux et des carottes.
Je deviens fou.
Je récupère une valeur avec la requête :
Je l'insère dans une chaine de caractères.Code:SELECT titre_message, corps_message, CAST(CAST(date_debut_message AS DATE)AS NVARCHAR(10)) as jour
Et patatras :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $body = "Bonjour." for ($i=0;$i -le $DataSetMessage.tables[0].rows.count - 1;$i++) { $body + "`n" + $DataSetMessage.tables[0].rows[$i]["jour"] + " : " + "`n" + $DataSetMessage.tables[0].rows[$i]["titre_message"] + " : " + $DataSetMessage.tables[0].rows[$i]["corps_message"] } }
Pourquoi on me parle de convertir une string en entier ? ....:?Code:
1
2
3
4
5
6
7 Cannot convert value "2018-02-07" to type "System.Int32". Error: "Input string was not in a correct format." At C:\...:147 char:3 + + $DataSetMessage.tables[0].rows[$i]["jour"] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger
Un problème avec mes " : " ?
Une erreur supplémentaire :
Est ce que ça veut dire qu'aucun destinataires n'a pu recevoir le mail ou autre chose ?Code:
1
2
3
4
5
6 Exception calling "Send" with "1" argument(s): "Unable to send to a recipient." At C:\Users\adm-rva\Documents\Alain\MailCommTerrainV5.ps1:173 char:2 + $SMTPClient.Send($emailMessage) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpFailedRecipientsException
:P, de rare fois Powershell peut provoquer cela.
Toi tu le penses.
Oui et non, avec la construction des lignes d'instructions. Là aussi je n'ai pas percuté car j'écris rarement comme ça, j'utilise des herestring( notion PS) ou l'opérateur de formatage -F ou encore la classe StringAppender (dotnet).
Comme tu places l'opérateur '+' sur une nouvelle ligne, le parser de Powershell considére que tu débutes une nouvelle instruction, et tente donc pour +":" une transformation afin d'obtenir la valeur positive de ':'.
Mais il a du mal à le faire :aie:
Une chose à la fois, a priori la construction de l'appel de sendmail pose pb, entoure la de guillemets double afin de l'afficher dans la console : "Send-mail etc ".
Et vérifie la avec un seul destinataire de test
Je ne sais pas, consulte la doc.
A priori certains ne l'ont pas reçus, regarde la propriété 'FailedRecipient' de l'exception.
Il te faut donc mettre en place une gestion d'exception :zen:
Merci.
Je veux bien ta méthode pour concaténer et merci pour tes explications.
Pour :j'ai testé, c'est bien un message qui apparaît lorsqu'un mail n'est pas remis. :yaisse1:Code:
1
2
3
4
5
6 Exception calling "Send" with "1" argument(s): "Unable to send to a recipient." At C:\Users\adm-rva\Documents\Alain\MailCommTerrainV5.ps1:173 char:2 + $SMTPClient.Send($emailMessage) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpFailedRecipientsException
Peut être, j'essaierai de logguer cela...
Je fais le point et je continue.
Il me reste le problème du format de date et les caractères spéciaux.
me renvoie :Code:($DataSetMessage.tables[0].rows[$i]["jour"])
etCode:2018-02-07
me renvoie :Code:($DataSetMessage.tables[0].rows[$i]["jour"]-as [datetime] )
C'est pas de pot parce que je voulaisCode:02/07/2018 00:00:00
Et pour les caractères spéciaux :Code:02/07/2018
renvoie :Citation:
$emailMessage.Subject = "Actualités"
.Citation:
Actualité
Pour la herestring voir ici le chapitre 1.5.
Pour l'opérateur -F :
http://go.microsoft.com/fwlink/?LinkID=166450
et https://docs.microsoft.com/fr-fr/dot...ite-formatting
Enfin StringBuilder, et non pas StringAppender.
:-)
Dans ce cas si ton serveur utilise un autre formatage/langue, il te faut retravailler le format en local.
C'est un cas épineux :-)Code:
1
2
3
4
5 [datetime]::ParseExact('2018-02-07',"yyyyddMM",$null) # lundi 2 juillet 2018 00:00:00 [datetime]::ParseExact('2018-02-07',"yyyyddMM",$null).ToShortDateString() # 02/07/2018
A priori un pb de page de code, recherche sur les forums dédiés.
Bonjour.
Je ne sais pas comment retravailler mes données à l'intérieur d'une boucle for.
renvoieCode:$body = $body + "`r`n" + ($DataSetMessage.tables[0].rows[$i]["jour"]-as [datetime] ) + " : " + "`r`n" + ...
Citation:
02/07/2018 00:00:00
ne fonctionne pas : "Exception calling "ParseExact" with "3" argument(s): "String was notCode:$body = $body + "`r`n" + [datetime]::ParseExact(($DataSetMessage.tables[0].rows[$i]["jour"]-as [datetime] -as[string] ),"yyyyddMM",$null).ToShortDateString() + ...
recognized as a valid DateTime."
"
Curieusement, lorsque je récupère des chaînes de caractères avec caractères spéciaux de la BDD, il s'affiche correctement et si je crée un chaîne dans le script PS non ?
renvoieCode:
1
2 $emailMessage.Subject = "Actualité" $body = @('Aucune actualité aujourd''hui')
etCitation:
Actualité
Citation:
Aucune actualité aujourd'hui
Pour le pb de date , je n'ai pas recopié la bonne ligne dans l'exemple :
Code:
1
2 [datetime]::ParseExact('2018-02-07',"yyyy-dd-MM",$null).ToShortDateString()
Non, je pense que c'est la bonne ligne.
C'est que je ne sais l'implémenter dans mon code :
Code:$body = $body + "`r`n" + [datetime]::ParseExact(($DataSetMessage.tables[0].rows[$i]["jour"]-as [datetime] ),"yyyy-dd-MM",$null).ToShortDateString() +
provoque l'erreur :
Citation:
Exception calling "ParseExact" with "3" argument(s): "String was not
recognized as a valid DateTime."
At C:\Users\... .ps1:152 char:3
+ $body = $body + "`r`n" + [datetime]::ParseExact(($DataSetMess ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
Excuse moi.
C'était :Reste les caractères accentués dans les string que je crée en powershell.Code:[datetime]::ParseExact(($DataSetMessage.tables[0].rows[$i]["jour"]),"yyyy-dd-MM",$null).ToShortDateString()
Je ne peux que te proposer la lecture de ce post.
Pense à isoler le pb en dehors de ton code d'accès à la base
Tu peux aussi tester ton code ce même code avec le version 6.0.1 de Powershell core qui a modifié l'encodage (si toutefois les classes que tu utilises ont été portées).
Bonjour.
Tout fonctionne merci beaucoup.