Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • Autor

$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

  • Autor

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.

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

  • Autor

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!

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

  • Autor

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.

  • Autor

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

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?

  • Autor

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.