marabunta
Goto Top

Powershell start-process als aktueller Benuter mit adminrechten

ich habe einen task der ein programm starten soll für den aktuell angemeldeten nutzer (i.d.R. Adminrechte verfügbar)
Der Task läuft unter dem Nutzer SYSTEM mit Adminrechten....

Das würde es mit Adminrechten starten, jedoch für den Benutzer "SYSTEM"
$todo=start-process -Verb RunAs $programm

Ich kann das Programm auch für den aktuell angemeldetem Benutzer starten, nur dann mit eingeschränkten rechten:

$todo=&"$programm"

Was ich brauche ist eine kombination von beiden:
$todo=start-process -Verb RunAs $loggedinUser $programm
mit credentials kann ich nicht arbeiten weil ich keine leeren passwörter in securestring konvertieren kann...
weiß jemand rat?

Content-Key: 258252

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

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

Mitglied: 114757
114757 Dec 20, 2014 updated at 22:10:18 (UTC)
Goto Top
Moin,
start-process kennt den Parameter -Credential ... machts jetzt Klick face-wink

$user = "username"  
$pass = "password"  
$cred = New-Object PSCredential($user,(ConvertTo-SecureString -String $pass -AsPlainText -Force))

Start-Process c:\deine.exe  -Credential ($cred)
Gruß jodel32
Member: Marabunta
Marabunta Dec 20, 2014 updated at 22:09:26 (UTC)
Goto Top
hab ich eben noch editiert:
mit credentials kann ich nicht arbeiten weil ich keine leeren passwörter in securestring konvertieren kann...

also es ist eher eine private umgebung und da sind auch leere passwörter unterwegs
Mitglied: 114757
114757 Dec 20, 2014 updated at 22:18:43 (UTC)
Goto Top
was ist der Sinn und Zweck ?? Da scheint mit eher ein Denkfehler in der Logik zu sein.
Mit höchsten Rechten kannst du alles machen...,
Member: Marabunta
Marabunta Dec 20, 2014 updated at 22:31:16 (UTC)
Goto Top
Die Software/Tool verwendet den Benutzernamen und schaltet entsprechende Oberflächen frei. Dazu wird der Username unter dem der Prozess läuft ausgelesen. "SYSTEM" hilft den Task recht einfach einzurichten und das Programm zu starten/updaten etc., aber bei dieser Software "darf" es eben nicht "SYSTEM" als Processowner sein.
Bisher wurde es mit psexec gemacht und funktioniert auch. Soll aber zukünftig ohne weitere Software auskommen.

das problem ohne pw:
PS C:\...> $user = "$thisuser"  
$pass = ""  
$cred = New-Object PSCredential($user,(ConvertTo-SecureString -String $pass -AsPlainText -Force))
ConvertTo-SecureString : Das Argument kann nicht an den Parameter "String" gebunden werden, da es sich um eine leere Zeichenfolge handelt.  
In Zeile:3 Zeichen:71
+ $cred = New-Object PSCredential($user,(ConvertTo-SecureString -String $pass -AsP ...
+                                                                       ~~~~~
    + CategoryInfo          : InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
Mitglied: 114757
Solution 114757 Dec 20, 2014, updated at Dec 21, 2014 at 01:38:13 (UTC)
Goto Top
https://clymb3r.wordpress.com/2013/11/03/powershell-and-token-impersonat ...

By the way sollte folgende Policy auf disabled stehen damit das klappen soll:

Start >> Ausführen ... >> secpol.msc
Local Policies >> Security Options >> Limit local account use of blank passwords to console logon only.

Dann kommt aber auch jeder Depp der einen Usernamen kennt auf den Rechner...

Andere Möglichkeit, du erstellst einen weiteren Task aus deinem PS-Script welcher dann mit den Creds des Users aus deinem PSScript heraus gestartet wird.
Member: Marabunta
Marabunta Dec 21, 2014 updated at 01:37:54 (UTC)
Goto Top
danke hat teilweise funktioniert.
da es als system läuft scheint er mit $env:username ein problem zu haben und den computernamen doppelt zu setzen:

Main : A token belonging to the specified username was not found. Username: 
TestComputerTestComputer$
In C:\test.ps1:1639 Zeichen:1
+ Main
+ ~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorExcep 
   tion
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio 
   n,Main
 

kann ich den angemeldeten benutzernamen anders auslesen?


hab was gefunden:
$proc = gwmi win32_process -computer localhost -Filter "Name = 'explorer.exe'"  
        #Go through collection of processes
        ForEach ($p in $proc) {
            $temp = "" | Select Domain, User  
            $temp.user = ($p.GetOwner()).User
            $temp.domain = ($p.GetOwner()).Domain
            $global:report += $temp
          }
Member: DerWoWusste
DerWoWusste Dec 21, 2014 at 17:40:51 (UTC)
Goto Top
Hi.

Darf ich das Ding nochmal aufrollen? Du hast einen Adminuser, der einen Task nutzen soll, welcher ein Skript startet. Und dabei soll mit höchsten Rechten gearbeitet werden.
Wozu der Nutzer System, der wird meiner Ansicht nach nicht benötigt. Einfach den Task einrichten mit der Option "mit höchsten Rechten ausführen" und "nur wenn angemeldet ausführen" und fertig.
Member: Marabunta
Marabunta Dec 21, 2014 at 18:15:34 (UTC)
Goto Top
Mit Powershell einen Task erstellen
$Rootfolder.RegisterTaskDefinition('Run a powershell script through a scheduled task', $TaskDefinition, 6, "System", $null , 5)
lässt sich der Task mit der funktion auch ohne "System" starten? Also ohne einen User zu brauchen?
Dann würde ich es natürlich gleich streichen.
Member: DerWoWusste
DerWoWusste Dec 21, 2014 at 18:39:59 (UTC)
Goto Top
Ich kann Dir zur Powershell-Syntax nichts aus dem Stegreif sagen, aber es wird mit Sicheheit gehen. Ein Kennwort musst Du hierbei nicht übergeben, du musst lediglich die Optionen "ausführen nur wenn angemeldet" "und mit höchsten Privilegien ausführen" umsetzen.