Buen día, amantes de Powershell.
Lo amo, y hoy noté una rareza que me motivó a escribir esta publicación. Creo que también te interesará. El caso del exceso de garrapatas. Si está interesado, bienvenido a cat:
¿Cuál es la esencia de la extrañeza?
En un procesamiento, para la conveniencia de la selección, se necesitaba el número de días hasta el final del mes.
Esto se calculó en una línea de este tipo:
((Get-date -Day 1).AddMonths(1)-(get-date)).days-1
Lo característico es que su cálculo puede dar resultados diferentes:

Al principio, pensé que algo estaba mal con el código, o con la versión Powershell.
Lo revisé en varios autos y me di cuenta de que la situación es reproducible.
Por lo tanto, me senté para debutar y escribir una función.
Recibí esto, los comentarios van inmediatamente al código:
Function Get-DaysToEndOfMonths([int]$Month=1) {If($Month -lt 1){[int]$Month = 1} $CurrentDate = get-date
Bueno, después de escribir, me senté a pensar y llegué a esta línea:
[int]((((Get-Date -day 01).AddMonths(1)).AddDays(-1)).Day-(Get-date).Day)
Ella no dio un error, pero tal vez, porque:
Resulta que no tenemos en cuenta la hora \ minuto \ segundo, o más bien el reloj del procesador.
Tenga en cuenta que Get-date devuelve un valor en milisegundos.
Pero si, al realizar los cálculos, la primera y segunda llamada Get-date cayeron en un tic, entonces habrá tales valores:
(Get-date -day 1).AddMonth(1) = 1.12.2019 15:33:00:500 Get-date = 1.11.2019 15:33:00:500
Resta y obtén 30 00: 00: 00: 000
Pero si la llamada a la segunda Get-date cae en el siguiente tick, entonces su valor será
=>
1.11.2019 15:33:00:501
Y luego obtenemos el valor en
29 23:59:59:999
Ahora que se encuentra el problema, podemos hacer esto:
Y siempre tendremos el mismo significado.
¡Ten cuidado y ten un buen fin de semana!