Ps1-Skript als Admin mit Credentials starten
Hallo,
ich habe das folgende Problem und brauch eure Hilfe da ich selber nicht weiter komme:
ich möchte ein ps1-Skript als Admin ausführen. Da ist jetzt nichts dran. Das funktioniert. PowerShell erkennt von selber dass es nicht als Admin gestartet wurde und startet als Admin neu.
Jetzt kommt das eigentliche Problem. Wenn es startet kommt das Windows-Fenster dass User und Passwort benötigt werden. Das ganze soll später automatisiert ablaufen, deswegen darf keine manuelle Eingabe mehr kommen.
Gibt es ein Möglichkeit im Skript den Benutzer und das PW in das Windows-Eingabe-Fenster zu übergeben?
Es muss an der stelle auch nicht verschlüsselt sein oder so. Das ganze läuft nur intern und ist allgemein bekannt deswegen kann es auch im Klartext drin stehen.
Ich bin mit meinen Nerven am Ende und erhoffe mir Hilfe von euch.
Das Skript sieht bis jetzt so aus:
Danke schon jetzt für eure Hilfe!
Grüße aus Nürnberg
ich habe das folgende Problem und brauch eure Hilfe da ich selber nicht weiter komme:
ich möchte ein ps1-Skript als Admin ausführen. Da ist jetzt nichts dran. Das funktioniert. PowerShell erkennt von selber dass es nicht als Admin gestartet wurde und startet als Admin neu.
Jetzt kommt das eigentliche Problem. Wenn es startet kommt das Windows-Fenster dass User und Passwort benötigt werden. Das ganze soll später automatisiert ablaufen, deswegen darf keine manuelle Eingabe mehr kommen.
Gibt es ein Möglichkeit im Skript den Benutzer und das PW in das Windows-Eingabe-Fenster zu übergeben?
Es muss an der stelle auch nicht verschlüsselt sein oder so. Das ganze läuft nur intern und ist allgemein bekannt deswegen kann es auch im Klartext drin stehen.
Ich bin mit meinen Nerven am Ende und erhoffe mir Hilfe von euch.
Das Skript sieht bis jetzt so aus:
$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
$cred = Get-Credential
return;
}
Danke schon jetzt für eure Hilfe!
Grüße aus Nürnberg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 347609
Url: https://administrator.de/contentid/347609
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
9 Kommentare
Neuester Kommentar
Du musst das Skript schon mit den Admin-Credentials starten dann kommt keine Abfrage der Credentials wenn es via "runas" eleviert wird!
Alternative Credentials lassen sich immer mit
direkt im Code erstellen und damit eine neue Shell mit den Credentials öffnen.
Gruß
Alternative Credentials lassen sich immer mit
(new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force)))
direkt im Code erstellen und damit eine neue Shell mit den Credentials öffnen.
mit Cradantials starten
Für den Faux-Pas gibt's den Bearbeiten-Button!Gruß
Hier auch ein Lösungsansatz...
https://stackoverflow.com/questions/12693327/running-a-powershell-script ...
https://stackoverflow.com/questions/12693327/running-a-powershell-script ...
Hi,
Du könntest das Skript per Windowsaufgabe (Taskscheduler) starten, um die das Skript mit bestimmten Credentials laufen zu lassen und die UAC-Abfrage zu umgehen. Und so ein Task kann man auch mit einem Aufruf (z.B. per Verknüpfung) manuell starten.
Ansosten hier einige Beispiele:
Hoffe das hilft Dir weiter.
Gruß
Olli
Du könntest das Skript per Windowsaufgabe (Taskscheduler) starten, um die das Skript mit bestimmten Credentials laufen zu lassen und die UAC-Abfrage zu umgehen. Und so ein Task kann man auch mit einem Aufruf (z.B. per Verknüpfung) manuell starten.
Ansosten hier einige Beispiele:
Zitat von @barry99:
. . .
Gibt es ein Möglichkeit im Skript den Benutzer und das PW in das Windows-Eingabe-Fenster zu übergeben?
Es muss an der stelle auch nicht verschlüsselt sein oder so. Das ganze läuft nur intern und ist allgemein bekannt deswegen kann es auch im Klartext drin stehen.
. . .
. . .
Gibt es ein Möglichkeit im Skript den Benutzer und das PW in das Windows-Eingabe-Fenster zu übergeben?
Es muss an der stelle auch nicht verschlüsselt sein oder so. Das ganze läuft nur intern und ist allgemein bekannt deswegen kann es auch im Klartext drin stehen.
. . .
# Beispiel um Username und Password im Skript zu speichern (Nicht empfohlen!!!)
$username = "John Doe"
$password = "ABCDEF"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
#Anderes Beispiel:
# Abfragen und speichern
read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt
# Einlesen und benutzen
$username = "domain01\admin01"
$password = cat C:\securestring.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
$serverNameOrIp = "192.168.1.1"
Restart-Computer -ComputerName $serverNameOrIp `
-Authentication default `
-Credential $cred
Hoffe das hilft Dir weiter.
Gruß
Olli
Servus.
Hier steht von mir wie's geht
Powershell Script mit Benutzerabfrage
Zweites Skript benutzen und das Get-Credential durch das Codesnippet von @133883 austauschen!
Und fertig ist die Laube.
Grüße Uwe
p.s. den peinlichen Tippfehler im Titel kann man mit dem Bearbeiten-Button korrigieren!
Hier steht von mir wie's geht
Powershell Script mit Benutzerabfrage
Zweites Skript benutzen und das Get-Credential durch das Codesnippet von @133883 austauschen!
$cred = (new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force)))
Das Skript per Windowsaufgabe (Taskscheduler) starten habe ich auch schon überlegt. Ich weiß aber nicht wie ich es dort ohne einen manuellen Eingriff reinbringe und dann wieder per Skript die Aufgabe erstelle?!?!?!?
Das ist doch ein Klacks mit New-ScheduledTaskGrüße Uwe
p.s. den peinlichen Tippfehler im Titel kann man mit dem Bearbeiten-Button korrigieren!
Zitat von @barry99:
Ja, ja, der Tippfehler ist beschemend ist mir schon klar, ich kann es aber nicht mehr korrigieren.
Wieso? Sicher kannst du das korrigieren! Einfach im Ursprungsbeitrag auf "Bearbeiten" klicken und ändern. Diese zwei kleinen Änderungen sind noch erlaubt und im Rahmen der möglichen Änderungen bei beantworteten Beiträgen.Ja, ja, der Tippfehler ist beschemend ist mir schon klar, ich kann es aber nicht mehr korrigieren.
Zitat von @colinardo:
Wollte ich gerade sagen ...Zitat von @barry99:
Ja, ja, der Tippfehler ist beschemend ist mir schon klar, ich kann es aber nicht mehr korrigieren.
Wieso? Sicher kannst du das korrigieren! Einfach im Ursprungsbeitrag auf "Bearbeiten" klicken und ändern.Ja, ja, der Tippfehler ist beschemend ist mir schon klar, ich kann es aber nicht mehr korrigieren.