nutzer123456 0 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 (bearbeitet) Hallo! ich hab gerade ein kosmetisches Problem. Meine Rechnung für die Differenz zweier Tage ergibt einen negativen Wert. Der wert soll mir zeigen ob der Mitarbeiter schon existiert oder wann er anfängt. Ich hätte die Ausgabe aber gern als absoluten Wert. Hier das Skript: $Benutzer.Beginn kommt in der Form 01.01.2020 # Für jeden Datensatz im CSV foreach ($Benutzer in $CSVImport) { if ($Benutzer.Beginn) { $a = (Get-Date $benutzer.Beginn) - (get-date) if ($a -le 0) { write-Host 'Der Mitarbeiter' $Benutzer.Fullname 'ist seit:' '{0:N0} Tage(n) beschäftigt.' -f $a.TotalDays } else { write-Host 'Der Mitarbeiter' $Benutzer.Fullname 'wird in:' '{0:N0} Tage(n) beginnen.' -f $a.TotalDays } } } bearbeitet 6. August 2020 von nutzer123456 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 [Math]::Abs() Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 (bearbeitet) { write-Host 'Der Mitarbeiter' $Benutzer.Fullname 'ist seit:' '{0:N0} Tage(n) beschäftigt.' -f [math]::abs($a.TotalDays) } das funktioniert super. Bekomm ich diese Ausgabe in eine Zeile. Wenn ich $Benutzer.fullname ohne write-Host verwende erkennt er das nicht als Variable. Und in Writehost funktioniert-f nicht. bearbeitet 6. August 2020 von nutzer123456 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 Alles in eine Variable schreiben und diese mit Write-Host ausgeben. $ausgabe = .... $ausgabe | write-host Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 (bearbeitet) $a = 'Der Mitarbeiter' $Benutzer.Fullname 'ist seit: {0:N0} Tage(n) beschäftigt.' -f [math]::abs($a.TotalDays) das erzeugt ein unerwartetes Token bei $benutzer.fullname, aber wenn ich es teile funktioniert es. $a = '{0:N0} Tage(n) beschäftigt.' -f [math]::abs($a.TotalDays) write-Host 'Der Mitarbeiter' $Benutzer.Fullname 'ist seit:' $a Eine Frage hätte ich noch kann ich $a.totaldays auch in ein Ausgabe formatieren die das in Jahre, Monate und Tage teilt. bearbeitet 6. August 2020 von nutzer123456 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 Strings musst du mit + zusammenführen. Alternativ " statt ' nutzen, aber dann musst du $benutzer.fullname zusammenhalten (mit Klammern bzw. $()). Kannst du ein Beispiel für die Ausgaben mit Jahr, Monat, Tag posten? Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 Jetzt würde hier stehen: Der Mitabeiter max, Mustermann ist seit: 412 Tagen beschäftigt. Schöner wäre aber : Der Mitabeiter max, Mustermann ist bereits 1 Jahr, 2 Monate und 5 Tage beschäftitg. (die Werte passen jetzt nicht zusammen, aber sollten es verdeutlichen) Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 Ausrechnen und ausgeben. Ich wüsste keine Funktion dazu. Evtl. hat das schon jemand im Internet gemacht. Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 { $a = 'Der Mitarbeiter ' + $($Benutzer.Fullname) + 'ist seit: {0:N0} Tage(n) beschäftigt.' -f [math]::abs($a.TotalDays) $A | write-Host } Ich hab das nochmal mit den + angepasst und jetzt ist es schön. Vielen Dank, wieder was gelernt. Wegen der Ausgabe guck ich mal rum ob sich was finden lässt. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 Du brauchst nicht beides. entweder '...' + $... oder "... $($...) ..." Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 (bearbeitet) vor 2 Stunden schrieb nutzer123456: Schöner wäre aber : Der Mitabeiter max, Mustermann ist bereits 1 Jahr, 2 Monate und 5 Tage beschäftitg. Ich hab mal für Dich gesucht und etwas einigermaßen Passendes gefunden: $start = Get-Date '1.4.2001' $span = [datetime]::Now - $start $dauer = New-Object DateTime -ArgumentList $span.Ticks Write-Host "Der Mitarbeiter ist seit $($dauer.Year - 1) Jahren, $($dauer.Month - 1) Monaten und $($dauer.Day) Tagen beschäftigt" #oder "Der Mitarbeiter ist seit {0,2} Jahren, {1,2} Monaten und {2,2} Tagen beschäftigt" -f $($dauer.Year - 1), $($dauer.Month - 1), $($dauer.Day) Inspiriert hiervon: StackOverflow - Powershell - Getting a persons age. Wenn Du noch ein oder zwei if - Bedingungen drumrum baust, bekommst Du auch noch die unschönen Null-Werte weg. ... sieht ja n' bissl doof aus, wenn da steht "Der Mitarbeiter ist seit 0 Jahren, 0 Monaten und 20 Tagen beschäftigt" bearbeitet 6. August 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 (bearbeitet) Dankeschön! Die Nullen finde ich jetzt nicht so dramatisch, dadurch bekommt die Ausgabe bei vielen Namen eine gewisse "Ruhe". Woran liegt ds hier das Jahren, und Monate und nicht in "" stehen müssen? bearbeitet 6. August 2020 von nutzer123456 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 vor 11 Minuten schrieb nutzer123456: Woran liegt ds hier das Jahren, und Monate und nicht in "" stehen müssen? Oooops ... eine kleine Nachlässigkeit beim Hin- und Her-Kopieren ... ich hab's korrigiert. ... und wenn Du es "schön ausgerichtet" ausgeben möchtest, kannst Du den Format-Operator "-f" verwenden und so die Ausgabe quasi Zeichen-genau formatieren. Zitieren Link zu diesem Kommentar
nutzer123456 0 Geschrieben 6. August 2020 Autor Melden Teilen Geschrieben 6. August 2020 Es hat ja trotz des Fehlers die richtige Ausgabe erzeugt. Da scheint doch irgendein Autoformat zu greifen. Egal ich mach die "" jetzt noch korrekt. Sonst muss ich später noch Fehler suchen die nicht sein mussten. Danke soweit! Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 6. August 2020 Melden Teilen Geschrieben 6. August 2020 vor 3 Minuten schrieb nutzer123456: Es hat ja trotz des Fehlers die richtige Ausgabe erzeugt. Da scheint doch irgendein Autoformat zu greifen. Powershell ist eher für Admins als für Software-Entwickler gemacht. Es werden gerne mal stillschweigend Fehler weggebügelt, um dem Admin trotz Fehlern ein verwertbares Ergebnis zu liefern. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.