2016-04-06 8 views
0


Okay, das nervt mich schon eine Weile und ich habe jetzt zu viele Dinge ausprobiert.

Ich versuche, ein PowerShell-Skript auszuführen - mein Benutzerkonto ist ein reguläres auf der Domäne, es ist jedoch lokaler Administrator auf meinem Computer. Daher habe ich ein PowerShell-Skript erstellt, das mich zur Eingabe von Anmeldeinformationen auffordert (wo ich die Anmeldeinformationen meines Domänenadministratorkontos eingabe), die zum Aufrufen eines anderen Skripts verwendet werden, das diese Domain-Administrator-Höhe benötigt. Dieses Skript sieht wie folgt aus:Der Zugriff auf localhost wird verweigert, obwohl er Administrator ist - PowerShell

Invoke-Command -FilePath "C:\Temp\script.ps1" -ComputerName localhost -Credential Get-Credential 

Hier die script.ps1 ist das Skript, das Domain-Administrator Höhe benötigt.
Die Ausführung der gezeigten Skript führt zu einer Eingabeaufforderung für Anmeldeinformationen und dann den folgenden Fehler:

[localhost] Connecting to remote server localhost failed with the following error message : Access is denied. 

ich um mit einer .bat Datei suchen, wie diese versucht haben, Messing:

SET ThisScriptsDirectory=%~dp0 
SET PowerShellScriptPath=%ThisScriptsDirectory%script.ps1 PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}"; 

als gut, aber Ich kann es nicht funktionieren lassen - es erhöht das Skript nicht auf Domänenadministratorebene.
Schließlich muss ich erwähnen, dass das Skript, das ich mit Domain-Erhöhung ausführen möchte, funktioniert, wenn ich PowerShell mit der Domain-Administrator-Höhe öffnen, zu C: \ Temp \ script.ps1 navigiert und es durch. \ Script.ps1 ausführt.

Irgendwelche Vorschläge?

+0

Wenn Sie nur versuchen, Skripts auf Ihrem lokalen Rechner auszuführen, warum verwenden Sie Invoke-Befehl? Sie können das Skript einfach ausführen und ihm Argumente in Ihrem Powershell-Host übergeben. –

Antwort

1

Wenn Sie über lokale Administratorrechte verfügen, führen Sie Powershell als Administrator aus und führen Sie Invoke-Command ohne das Flag -Credential aus. Wenn Sie das Skript nur lokal ausführen, brauchen Sie nicht Invoke-Command. Sie sollten das Skript einfach ausführen und Argumente übergeben.

+0

Lokale administrative Rechte sind nicht genug, ich brauche die Rechte meines Domain-Admins. – zniwalla

+0

fügen Sie den Domänenadministrator dem lokalen Computer als lokalen Administrator hinzu, führen Sie Powershell als anderen Benutzer aus (klicken Sie mit der rechten Maustaste, um 'als anderer Benutzer auszuführen' im Kontextmenü aufzurufen), geben Sie die DA-Anmeldeinformationen ein und führen Sie das Skript aus. Ich mache das regelmäßig bei der Arbeit mit meiner Vielzahl von administrativen Konten für Exchange-, AD- und Domain-Admin-Konten. –

0

Nun, Sie tun es falsch, wenn ich es richtig verstehe.

Der von Ihnen angegebene Berechtigungsnachweis wird verwendet, um auf localhost zuzugreifen (den Sie nicht benötigen BTW). Skript wird immer noch nicht ausgeführt. Es gibt zwei Lösungen:

  • Sie müssen die Powershell selbst erhöhen und das Skript ausführen.
  • Sie müssen das Skript so ändern, dass es den Credential-Parameter selbst akzeptiert und damit auf Dinge zugreifen kann. Es kann nicht viel mehr darüber gesagt werden, bis Sie das Skript zeigen.

Sie können mit Schale heben:

start powershell -verb Runas 

Das Problem hier ist, dass, wenn Sie UAC deaktivieren, werden Sie aufgefordert. Leider gibt es keinen einfachen Weg, den ich kenne. Ein sicherer Weg besteht darin, das Skript dem Aufgabenplaner hinzuzufügen und die Aufgabe so einzurichten, dass sie auf erhöhte Ebene ausgeführt wird. Führen Sie sie anschließend aus und löschen Sie die Aufgabe. All dies kann automatisiert werden. Dies ist eine Folge des unglücklichen Designs des UAC-Systems (sudo unter Linux, das denselben Zweck erfüllt, wird die Antwort für einige Zeit zwischenspeichern, so dass nachfolgende Befehle nicht aufgefordert werden).Dies würde so etwas wie:

schtasks /Create /TN runner ... /TR powershell -File script.ps1 /RU username /RP password /RL HIGHEST 
    schtasks /run runner 
    schtasks /delete runner 
+0

Ich habe Ihre erste Lösung versucht - wie erwähnt - aber ich kann mir keinen Weg vorstellen, diesen Prozess zu automatisieren. Es muss als Domänenadministrator und nicht als lokaler Administrator erhöht werden. Das Skript erstellt einen Benutzer im AD und ändert einige andere AD- und Exchange-Sachen, was eine Aufgabe ist, die den Domain-Admins vorbehalten ist und für meinen lokalen Administrator nicht zugänglich ist. – zniwalla

+0

Es ist irrelevant, ob es in Domäne oder lokal ist. Verwenden Sie einfach '/ RU-Domäne \ Benutzername'. Ihr Skript kann auch das Argument "-Credential" akzeptieren und Sie übergeben es mit "Get-Credential". Dann verwenden Sie entweder "schtasks.exe" (Sie müssen das Kennwort extrahieren) oder neuere TaskScheduler-Cmdlets (> = Win8), die Anmeldeinformationen akzeptieren. – majkinetor

+0

Okay, habe es ausprobiert: 'schtasks/Create/TN createUser/TR" Powershell -Datei script.ps1 "/ RU domain \ user/RP/RL HÖCHSTE/SC MONATLICH' aber es scheint nicht das Skript auszuführen . Das Cmd gibt dies aus, wenn ich die Aufgabe ausführe: 'SUCCESS: Ich habe versucht, die geplante Aufgabe" createUser "auszuführen." – zniwalla

0

Ein Thema, das mir geholfen hat (ich hatte einen ähnlichen Fall) war es, die im Abschnitt „Remoting Freigabe für Benutzer ohne Administratorrechte“ in About Remote Troubleshooting. Im Grunde werden Sie aufgefordert, einen PS-Befehl auszuführen: Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI und erteilen Sie dem Benutzer, der Sie verwenden möchten, Ausführungsberechtigung.