Afgstyler Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 (bearbeitet) Guten Tag, ich benötige Hilfe beim Scripten. Das Script soll Prüfen ob die Benutzer einen Prozess "Dump.exe" zwei mal Ausführen. Wenn ja dann soll eine E-mail mit dem Namen des User an den Administrator verschickt werden. Wie fange ich da am besten an? Ich bin ein Anfänger was Scripten an geht. Gruß Afgstyler Bearbeitet 17. Januar 2014 von Afgstyler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bummel Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 Ist das so schwer? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 17. Januar 2014 Autor Teilen Geschrieben 17. Januar 2014 (bearbeitet) $identity = [system.Security.Principal.WindowsIdentity]::GetCurrent() $princ = New-Object System.Security.Principal.WindowsPrincipal($identity) if(!$princ.IsInRole( ` [system.Security.Principal.WindowsBuiltInRole]::Administrator)) { $powershell = [system.Diagnostics.Process]::GetCurrentProcess() $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path $script = $MyInvocation.MyCommand.Path $prm = $script foreach($a in $args) { $prm += ' ' + $a } $psi.Arguments = $prm $psi.Verb = "runas" [system.Diagnostics.Process]::Start($psi) | Out-Null return; } if(Angemeldete Benutzer X 2 Prozess speicher den Namen in die Variable "$log" ab und verschicke die E-Mail) { send-mailmessage -from "XXXXXX@XXX.de" -to "XXXXXX@XXXXX.de" -subject "Hinweis Benutzer hat zwei Prozesse am laufen" -body $log -smtpServer "192.168.XXX.XXX" } Ich weiß nur nicht wie ich die Bedingung schreiben soll. Wenn einer der angemeldeten Benutzer zwei mal den Prozess "Dump.exe" offen hat soll der Name des Benutzer in der Variable "log" abgespeichert und die E-mail verschickt werden. Bearbeitet 17. Januar 2014 von Afgstyler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 get-process und count kombinieren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 17. Januar 2014 Autor Teilen Geschrieben 17. Januar 2014 Ich gebe mir mühe, leider gibt die Powershell nur Rot aus. Mit Get-Process erhalte ich nur die Liste mit Prozessen aber nicht die Benutzernamen! Ich weiß leider nicht wie vorgehen soll. Es fällt ja nur die if Schleife. Wenn die Benutzer einen Prozess mit dem Namen "Dump.exe" zwei mal ausführen soll der Name in die Variable ""log" gespeichert und der Befehl mit dem Versand ausgeführt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 17. Januar 2014 Autor Teilen Geschrieben 17. Januar 2014 get-process und count kombinieren Verstehe ich nicht, sagte ich bereits das noch ein Anfänger bin? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 (bearbeitet) Schnellschuss ohne Anspruch auf vollständigkeit und / oder korrektheit Rechtschreib und flüchtigkeitsfehler nicht ausgeschlossen. #Requires -Version 2.0 # # +--------------------------------------------------------------------------- # | File : CountProcesses.ps1 # | Author: SilentDemise # | Version : 1.0 # | Purpose : monitor duplicate processes # | Usage : .\CountProcesses.ps1 # +--------------------------------------------------------------------------- # ################################################################ # # DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED # # # THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK. IF # # # YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, # # # DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING. # # ################################################################ # #Name der zu überwachenende applikation und andere variablen $application = "notepad.exe" $smtpServer = "192.168.1.1" $from = "sample@test.de" $to = "sample@test.de" $subject = "Sampletext" #hash listen für passende properties $users = @() $checklist = @() $accounts = "" #laufende prozesse der oben genannten applikation finden $resultSet = (gwmi win32_process | where {$_.Name -eq $application}) #alle user die die applikation ausführen $users = $resultSet | ForEach-Object {$_.getowner().User} $checklist = $users | select -Unique if($checklist.Count -eq 0) { exit } #kopierte liste auf doppelte einträge testen $result = Compare-object –referenceobject $checklist –differenceobject $users $result | ForEach-Object {if($_.InputObject -ne $null) {$account += $_.InputObject}} #E-Mail $body = "the following accounts run 2 instances of $application - $accounts" Send-MailMessage -from $from -to $to -body $body -subject $subject -smtpServer $smtpServer Bearbeitet 17. Januar 2014 von SilentDemise Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 17. Januar 2014 Autor Teilen Geschrieben 17. Januar 2014 Hallo, erst mal Danke. Was setzte ich hier ein? Ich wollte keinen bestimmten Benutzer abfragen sondern alle. #hash listen für passende properties $users = @() $checklist = @() $accounts = "" Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hbspike Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 so wie ich das script verstanden habe macht: #alle user die die applikation ausführen $users = $resultSet | ForEach-Object {$_.getowner().User} $checklist = $users | select -Unique es wird über das $resultSet iteriert und für jedes Object der User in die Variable $users geschrieben, danach wird eine $checkliste erstellt in dem jeder eindeutige user aus $users in diese geschrieben wird mit select -Unique. Da ich aber keine Ahnung von powershell habe könnte es auch "magie" sein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 17. Januar 2014 Teilen Geschrieben 17. Januar 2014 Genau was hb sagt. Die drei variablen laesst du einfach so, sas sins nur initializer für bestimmte datentypen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 20. Januar 2014 Autor Teilen Geschrieben 20. Januar 2014 Hallo, ich habe das Script mehrfach ausgeführt. E-mail kommt an aber es werden keine Namen ausgeben? Silent könnst du das noch mal prüfen. Ich habe versucht den Fehler zu finden leider ohne erfolg. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 20. Januar 2014 Teilen Geschrieben 20. Januar 2014 heißt der prozess auch so wie du ihn angegeben hast? (task manager) mit notepad klappt das bei mir problemlos. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 20. Januar 2014 Autor Teilen Geschrieben 20. Januar 2014 (bearbeitet) So ich habe die Fehler gefunden! #Requires -Version 2.0 # # +--------------------------------------------------------------------------- # | File : CountProcesses.ps1 # | Author: SilentDemise # | Version : 1.0 # | Purpose : monitor duplicate processes # | Usage : .\CountProcesses.ps1 # +--------------------------------------------------------------------------- # ################################################################ # # DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED # # # THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK. IF # # # YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, # # # DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING. # # ################################################################ # #Name der zu überwachenende applikation und andere variablen $application = "notepad.exe" $smtpServer = "192.168.XXX.X" $from = "XXXX@XXXX.de" $to = "XXXX.XXXX@XXXXX.de" $subject = "XXXXXXXXX" #hash listen für passende properties $users = @() $checklist = @() $accounts = "" #laufende prozesse der oben genannten applikation finden $resultSet = (gwmi win32_process | where {$_.Name -eq $application}).getowner() #alle user die die applikation ausführen $users = $resultSet | ForEach-Object {$_.User} $checklist = $users | select -Unique if($checklist.Count -eq 0) { exit } #kopierte liste auf doppelte einträge testen $result = Compare-object –referenceobject $checklist –differenceobject $users $result | ForEach-Object {if($_.SideIndicator -eq "=>") {$accounts += $_.InputObject}} if($accounts.Count -eq 0) { exit } #E-Mail $body = "the following accounts run 2 instances of $application - $accounts" Send-MailMessage -from $from -to $to -body $body -subject $subject -smtpServer $smtpServer Bearbeitet 20. Januar 2014 von Afgstyler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 20. Januar 2014 Teilen Geschrieben 20. Januar 2014 Naja, dann ists nicht wirklich ein Fehler, du brichst jetzt einfach nur das script ab, wenn nichts doppelt läuft. Dafür brauchst du die oberen änderungen nicht, die sind nur auslagern integrierter schritte in eigene statements Du denkst dran, dass du notepad.exe ersetzen must, ne? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Afgstyler Geschrieben 20. Januar 2014 Autor Teilen Geschrieben 20. Januar 2014 Ja. Ich habe ein weiters Problem. Ich wollte das Script per Windows Aufgabenplaung ausführen und zwar jede 5 Minuten. Aber leider geht es nicht. Ich habe Notepad zwei mal offen. Wenn ich das Script Manuelle ausführe ist alles gut E-Mail kommt an. Aber per Windows Aufgabenplaner kommt nicht an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 20. Januar 2014 Teilen Geschrieben 20. Januar 2014 hat der user berechtigungen? stimmt der aufruf? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.