Bonjour, amoureux de Powershell.
Je l'aime et aujourd'hui j'ai remarqué une bizarrerie qui m'a motivé à écrire ce post. Je pense que ça vous intéressera aussi. Le cas de l'excès de tique. Si vous êtes intéressé, bienvenue au chat:
Quelle est l'essence de l'étrangeté?
En un seul traitement, pour faciliter la sélection, le nombre de jours jusqu'à la fin du mois était nécessaire.
Cela a été calculé sur une ligne de ce type:
((Get-date -Day 1).AddMonths(1)-(get-date)).days-1
Ce qui est caractéristique, c'est que son calcul peut donner des résultats différents:

Au début, je pensais que quelque chose n'allait pas avec le code ou avec la version Powershell.
Je l'ai vérifié sur plusieurs voitures et j'ai réalisé que la situation était reproductible.
Par conséquent, je me suis assis pour faire mes débuts et écrire une fonction.
J'ai compris, les commentaires vont immédiatement au code:
Function Get-DaysToEndOfMonths([int]$Month=1) {If($Month -lt 1){[int]$Month = 1} $CurrentDate = get-date
Eh bien, après avoir écrit, je me suis assis pour réfléchir et je suis arrivé à cette ligne:
[int]((((Get-Date -day 01).AddMonths(1)).AddDays(-1)).Day-(Get-date).Day)
Elle n'a pas donné d'erreur, mais peut-être parce que:
Il s'avère que nous ne prenons pas en compte l'heure \ minute \ seconde, ou plutôt l'horloge du processeur.
Notez que Get-date renvoie une valeur en millisecondes.
Mais si, lors de l'exécution des calculs, le premier et le deuxième appel Get-date tombaient sur un tick, alors il y aurait de telles valeurs:
(Get-date -day 1).AddMonth(1) = 1.12.2019 15:33:00:500 Get-date = 1.11.2019 15:33:00:500
Soustrayez et obtenez 30 00: 00: 00: 000
Mais si l'appel à la deuxième Get-date tombe au prochain tick, alors sa valeur sera
=>
1.11.2019 15:33:00:501
Et puis nous obtenons la valeur
29 23:59:59:999
Maintenant que le problème est trouvé, nous pouvons le faire:
Et nous aurons toujours la même signification.
Soyez prudent et passez un bon week-end!