w.sennecke 10 Geschrieben 12. November 2015 Melden Teilen Geschrieben 12. November 2015 (bearbeitet) Hallo liebe Leute, ich habe eine kurze Frage an die Powershell Profis hier. Wir haben dieses Script im Einsatz, um nicht aktive Benutzer zu finden (Logon älter 90 Tage). Dies wurde bisher immer in eine CSV geschrieben. Nun besteht die Anforderung die Ausgabe als Email zu verschicken. Kann mir jemand da einen Tipp geben? Ich habe versucht nach dem select-object statt des export-csv mit send-mailmessage zu arbeiten. Leider bekomme ich es nicht hin. Wäre super wenn jemand eine Lösung weiß. # Gets time stamps for all User in the domain that have NOT logged in since after specified date import-module activedirectory $domain = "domain.mydom.com" $DaysInactive = 90 $time = (Get-Date).Adddays(-($DaysInactive)) # Get all AD User with lastLogonTimestamp less than our time and set to enable Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | # Output Name and lastLogonTimestamp into CSV select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} | export-csv OLD_User.csv -notypeinformation Vielen Dank im voraus. Gruß, William bearbeitet 12. November 2015 von w.sennecke Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 12. November 2015 Melden Teilen Geschrieben 12. November 2015 Tach William, schau die mal das cmdlet Send-MailMessage an. Den Body für die Nachricht erstellst du einfach so: $Body = Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} 1 Zitieren Link zu diesem Kommentar
w.sennecke 10 Geschrieben 13. November 2015 Autor Melden Teilen Geschrieben 13. November 2015 (bearbeitet) Tach William, schau die mal das cmdlet Send-MailMessage an. Den Body für die Nachricht erstellst du einfach so: $Body = Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} Hi; leider bekomme es noch nicht so ganz hin. Das komplette Script sieht nun so aus: # Gets time stamps for all User in the domain that have NOT logged in since after specified date import-module activedirectory $domain = "domain.com" $DaysInactive = 90 $time = (Get-Date).Adddays(-($DaysInactive)) $Body = Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} send-mailmessage -to admins@domain.com -from admins@domain.com -Subject “Benutzeranmeldungen älter als 90 Tage” -body $Body -smtpserver mail.domain.com -encoding ([System.Text.Encoding]::UTF8) Es erscheint folgende Meldung: Send-MailMessage : "System.Object[]" kann nicht in den Typ "System.String" konvertiert werden, der für den Parameter "Body" erforderlich ist. Die angegebene Methode wird nicht unterstützt. Ich habe das Gefühl ich bin dicht dran. :) Hast du noch eine Idee? bearbeitet 13. November 2015 von w.sennecke Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 13. November 2015 Melden Teilen Geschrieben 13. November 2015 $Body = Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} | Out-String füge mal | Out-String hinten an. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 13. November 2015 Melden Teilen Geschrieben 13. November 2015 Aus der Ferne würde ich sagen: Get-ADUser liefert ein Array zurück. Das kann man nicht nach String konvertieren, sondern nur die Elemente im Array. Zitieren Link zu diesem Kommentar
w.sennecke 10 Geschrieben 13. November 2015 Autor Melden Teilen Geschrieben 13. November 2015 $Body = Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy-MM-dd_hh:mm:ss')}} | Out-String füge mal | Out-String hinten an. Super, es klappt!! Vielen vielen Dank. Kann ich als I-Tüpfelchen noch irgendwie absteigend nach Zeit sortieren? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2015 Melden Teilen Geschrieben 13. November 2015 Sort-Object Ich würde mir mal die Powershell Grundlagen anschauen. Zitieren Link zu diesem Kommentar
w.sennecke 10 Geschrieben 13. November 2015 Autor Melden Teilen Geschrieben 13. November 2015 Sort-ObjectIch würde mir mal die Powershell Grundlagen anschauen. Ein | Sort-Object LastLogonTimeStamp -Descending hat geholfen. Ich danke euch vielmals für die Hilfe. Wünsche euch ein schönes Wochenende. 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.