Zum Inhalt springen

Powershell Script Prozess prüfen


Empfohlene Beiträge

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 von Afgstyler
Link zu diesem Kommentar
Auf anderen Seiten teilen

$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 von Afgstyler
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von SilentDemise
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Afgstyler
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...