flofms
Goto Top

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

Content-Key: 196680

Url: https://administrator.de/contentid/196680

Printed on: April 19, 2024 at 18:04 o'clock

Member: Hitman4021
Hitman4021 Jan 09, 2013 at 11:50:38 (UTC)
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ß
Member: FloFMS
FloFMS Jan 09, 2013 updated at 12:17:13 (UTC)
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
Member: Hitman4021
Hitman4021 Jan 09, 2013 at 12:18:27 (UTC)
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ß
Member: FloFMS
FloFMS Jan 09, 2013 updated at 12:23:21 (UTC)
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'  
}
Member: FloFMS
FloFMS Jan 09, 2013 at 13:24:36 (UTC)
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.
Member: Hitman4021
Hitman4021 Jan 09, 2013 at 13:32:28 (UTC)
Goto Top
Hallo,

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

Gruß