flofms

PowerShell Script, Anwendung soll nur einmal gestartet werden?

Hallo Zusammen

Windows 2008 R2 Terminal Server.

Ich möchte per PowerShell Skript erreichen das ein TerminalServer User eine Anwendung nur 1x starten kann. Folgendes hab ich dazu schon zusammen. Das funktioniert aber nicht auf User sondern nur auf System ebenen. Soll heißen er findet immer alle Prozesse, sobald die Anwendung bei einem anderen TS-User läuft startet er sie nicht mehr. Mir fehlt irgendwie die Begrenzung auf den Aktuellen TS-User.

Kann mir jemand erklären wie ich das umsetzen kann?

$proc = Get-Process | Where-Object {$_.ProcessName -eq "Anwendung"}  

if ($proc -imatch 'Anwendung')  
{	
'Anwendung ist bereits gestartet'  
}
else
{
'Anwendung wird gestartet'  
& 'Pfad zur Anwendung'  
}

Danke

Gruß
Florian
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 196680

Url: https://administrator.de/forum/powershell-script-anwendung-soll-nur-einmal-gestartet-werden-196680.html

Ausgedruckt am: 21.06.2025 um 04:06 Uhr

Hitman4021
Hitman4021 09.01.2013 um 12:50:38 Uhr
Goto Top
Hallo,

bitte die < code > < /code > Tags benützen. Ohne Leerzeichen.

Wie wäre es etwa so in der Art:
$curUser = [Environment]::UserName
$owners = @{}
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user}
$proc get-process | Where-Object {$_.ProcessName -eq "Anwendung"} | select processname,@{l="Owner"; e={$owners[$_.id.tostring()]}}  

if ($proc -imatch 'Anwendung') -and ( $proc -imatch "$curUser")  
{
'Anwendung ist bereits gestartet'  
}
else
{
'Anwendung wird gestartet'  
& 'Pfad zur Anwendung'  
}

Gruß
FloFMS
FloFMS 09.01.2013 aktualisiert um 13:17:13 Uhr
Goto Top
Hallo Hitman

Danke für die schnelle Antwort.

Es scheint einen kleinen Fehler nach der ersten "If" Anweisung zu geben. Er meckert immer den "Bindestrich" vor dem "and" an.
 -and ( $proc -imatch "$curUser")  
Gruß
Florian
Hitman4021
Hitman4021 09.01.2013 um 13:18:27 Uhr
Goto Top
Hallo,

sry hab ne Klammer vergessen.

Korrigiert:
$curUser = [Environment]::UserName
$owners = @{}
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user}
$proc get-process | Where-Object {$_.ProcessName -eq "Anwendung"} | select processname,@{l="Owner"; e={$owners[$_.id.tostring()]}}  

if (($proc -imatch 'Anwendung') -and ( $proc -imatch "$curUser"))  
{
'Anwendung ist bereits gestartet'  
}
else
{
'Anwendung wird gestartet'  
& 'Pfad zur Anwendung'  
}

Gruß
FloFMS
FloFMS 09.01.2013 aktualisiert um 13:23:21 Uhr
Goto Top
Perfekt

Oben hat auch ein = gefehlt (hinter $proc)

So funktioniert es Problemlos.

Danke für die schnelle Hilfe.

$curUser = [Environment]::UserName
$owners = @{}
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user}
$proc = Get-Process | Where-Object {$_.ProcessName -eq "Anwendung"} | select processname,@{l="Owner"; e={$owners[$_.id.tostring()]}}  

if (($proc -imatch 'Anwendung') -and ( $proc -imatch "$curUser"))  
{
'Anwendung ist bereits gestartet'  
}
else
{
'Anwendung wird gestartet'  
& 'Pfad zur Anwendung'  
}
FloFMS
FloFMS 09.01.2013 um 14:24:36 Uhr
Goto Top
Eine Frage noch.

Wie kann ich einen Pfad mit Leerzeile angeben?

Ich hab das Problem das der unter Zeile 13 angegebene Pfad bei einer Anwendung ein Leerzeichen hat. Irgendwie hab ich nichts dazu gefunden.
Hitman4021
Hitman4021 09.01.2013 um 14:32:28 Uhr
Goto Top
Hallo,

'C:\SO FUNKTIONIERT DAS\cmd.exe'  

Gruß