Benötige Powershell, die Tage zwischen zwei Daten ausgibt
Hintergrund:
ich möchte mit unserem Monitoring Tool , Lizenzen unserer Software überwachen bzw. wann diese Ablaufen, damit ich rechtzeitig neue anfordere.
Dazu wollte ich eine Powershell Abfrage machen, die Das heutige Datum ausliest und es mit dem Datum in der Lizendatei oder manuell per Parameter, den ich beiM Aufruf des Scriptes mitgebe vergleicht und die Tage dazwischen, als Wert, ausgibt.
Folgendes Script habe ich dazu gefunden, welches abe rnicht funktioniert:
ich bekomme beim aufruf von expire.ps1 -ExpirationDate="31.01.2019" folgende Fehlermeldung:
Kann mir evtl. jemand sagen, was der Fehler ist, oder ein alternatives Script liefern?
Vielen Dank im Voraus
ich möchte mit unserem Monitoring Tool , Lizenzen unserer Software überwachen bzw. wann diese Ablaufen, damit ich rechtzeitig neue anfordere.
Dazu wollte ich eine Powershell Abfrage machen, die Das heutige Datum ausliest und es mit dem Datum in der Lizendatei oder manuell per Parameter, den ich beiM Aufruf des Scriptes mitgebe vergleicht und die Tage dazwischen, als Wert, ausgibt.
Folgendes Script habe ich dazu gefunden, welches abe rnicht funktioniert:
Param([string]$ExpirationDate)
$DateDifference = New-TimeSpan -Start (Get-Date -format d) -End $ExpirationDate
$Days = $DateDifference.Days
$DaysPassed = ($Days * -1)
if($Days -gt 0){
Write-Host "$($Days):License expires in $($Days) day(s)."
exit 0 }
if($Days -eq 0){
Write-Host "$($Days):The license expires today!";
exit 1
}
if($Days -lt 0){
Write-Host "0:License expired for $($DaysPassed) days!"
exit 1
}
ich bekomme beim aufruf von expire.ps1 -ExpirationDate="31.01.2019" folgende Fehlermeldung:
New-TimeSpan : Der Parameter "End" kann nicht gebunden werden. Der Wert "-ExpirationDate=31.01.2019" kann nicht in den
Typ "System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
In C:\Users\Administrator\Desktop\expire.ps1:3 Zeichen:65
+ $DateDifference = New-TimeSpan -Start (Get-Date -format d) -End $ExpirationDate
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewTimeSpanCommand
Kann mir evtl. jemand sagen, was der Fehler ist, oder ein alternatives Script liefern?
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 380915
Url: https://administrator.de/forum/benoetige-powershell-die-tage-zwischen-zwei-daten-ausgibt-380915.html
Ausgedruckt am: 06.04.2025 um 12:04 Uhr
14 Kommentare
Neuester Kommentar
Moin,
ist doch klar:
Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
hth
Erik
ist doch klar:
Param([string]$ExpirationDate)
Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
hth
Erik
Zitat von @erikro:
Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
Das ist hier ausnahmsweise egal da das CMDLet den String für den Parameter automatisch anhand der aktiven "Culture" in ein Date-Object konvertiert.Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
Moin,
Stimmt. Pfui, Microsoft! ;) Dann verstehe ich das aber gar nicht mehr. Ich hab's so in meine ISE kopiert, gespeichert und es funktioniert mit und ohne [string]. Dann liegt das Problem wohl bei der Eingabe des Datums. Bei mir kommt die Meldung nur, wenn ich ein falsches Datum eingebe:
Edit: Jetzt ahne ich was: Gibst Du vielleicht das so ein?
Liebe Grüße
Erik
Zitat von @colinardo:
Die vorherige Umwandlung des Datums in einen String in Zeile 3 für den Parameter "-Start" ist ebenfalls überflüssig.
Zitat von @erikro:
Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
Das ist hier ausnahmsweise egal da das CMDLet den String automatisch anhand der aktiven "Culture" in ein Date-Object konvertiert.Wenn Du einer Variablen explizit den Datentyp string gibst, dann ist da auch ein string und kein date drin, auch wenn der string ein Datum ist. ;)
Die vorherige Umwandlung des Datums in einen String in Zeile 3 für den Parameter "-Start" ist ebenfalls überflüssig.
Stimmt. Pfui, Microsoft! ;) Dann verstehe ich das aber gar nicht mehr. Ich hab's so in meine ISE kopiert, gespeichert und es funktioniert mit und ohne [string]. Dann liegt das Problem wohl bei der Eingabe des Datums. Bei mir kommt die Meldung nur, wenn ich ein falsches Datum eingebe:
PS P:\ps1> .\datespam.ps1 31.01.2019
195:License expires in 195 day(s).
PS P:\ps1> .\datespam.ps1 31.02.2019
New-TimeSpan : Der Parameter "End" kann nicht gebunden werden. Der Wert "31.02.2019" kann nicht in den Typ
"System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
In P:\ps1\datespam.ps1:3 Zeichen:65
+ $DateDifference = New-TimeSpan -Start (Get-Date -format d) -End $ExpirationDate
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewTimeSpanCommand
0:License expired for days!
PS P:\ps1> .\datespam.ps1 -expirationdate 31.01.2019
195:License expires in 195 day(s).
PS P:\ps1> .\datespam.ps1 -expirationdate 31.02.2019
New-TimeSpan : Der Parameter "End" kann nicht gebunden werden. Der Wert "31.02.2019" kann nicht in den Typ
"System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
In P:\ps1\datespam.ps1:3 Zeichen:65
+ $DateDifference = New-TimeSpan -Start (Get-Date -format d) -End $ExpirationDate
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewTimeSpanCommand
0:License expired for days!
PS P:\ps1>
Edit: Jetzt ahne ich was: Gibst Du vielleicht das so ein?
skript.ps1 -expirationdate=31.01.2019
Liebe Grüße
Erik
Zitat von @colinardo:
.
Dann liegt das Problem wohl bei der Eingabe des Datums.
Die Lösung für sein Problem steht in meinem ersten Post ==> das Gleicheitszeichen in seiner Parameterangabe beim Aufruf ist der Stein des Anstoßes Den habe ich jetzt übersehen.
Ändere einfach an meinem Skript den Parameter TotalCount auf 4 wenn es die vierte Zeile ist und fertig! Umwandeln brauchst du dort gar nichts denn das Format wird durch Verwendung der Culture 'en' automatisch erkannt da es ein gültiges Datumsformat ist!
Du brauchst keinen String nach xx.xx.yyyy sondern nur ein Date-Object!
Du brauchst keinen String nach xx.xx.yyyy sondern nur ein Date-Object!