Benutzer mit den meisten Antworten
SnapIn hinzufügen

Frage
-
Hallo,
ich möchte gerne über ein PHP Script ein Powershellscript ausführen. Soweit kein Problem.
Nun möchte ich aber einen User im AD über dieses PS-Script anlegen. Damit hat der User - welcher das PHP Script ausführt - keine Rechte zum anlegen des Users.
Wie kann ich im Powershellscript - welches nicht mit Adminrechten ausgeführt wird - SnapIns (für Exchange 2010) und andere Befehle ausführen?
Die Credentials des Admins habe ich in einer Variable gespeichert. Aber wie kann ich z.B. Add-SnapIn damit aufrufen und in der aktuellen Session benutzen?
Invoke-Command ??
Viele Grüße
Uwe
Antworten
-
Grundsätzlich ist es wohl so das das Ausführen des Exchange2010-Snappins in Scripten offenbar nicht supported ist. Was eine schnelle Websuche so zeigt, wirst du selbst wenn du das Cred/Snappin Problem gelöst hast, noch auf einige andere Probleme stoßen. Aber:
Warum muß es denn das Exchange-Snapin sein, wenn du nur einen User im Ad anlegen willst? Das geht auch prima mit ADSI: (siehe z.b. hier: LINK)
Und grundsätzlich: Warum führst du nicht das gesamte Powershellscript unter dem Account mit den entsprechenden AD-Rechten aus? Selbst wenn das mit PHP nicht gehen sollte, kannst du auch z.b. powershell ein zweites Script mit anderen Credentials starten lassen, in dem die ADSI-Befehle ausgeführt werden.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Samstag, 1. Juni 2013 12:19
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 7. Juni 2013 08:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 10. Juni 2013 10:48
-
Vorweg: ein grundsätzliches Problem bei dieser Lösung ist die Tatsache, das du das Passwort irgendwo hinterlegen musst. Dafür gibts (Google) diverse mögliche Ansätze, alle haben aber eines gemeinsam: sie sind alle mehr oder weniger unsicher.
Das wissend, geht das ganze aber z.b. über ein System.Diagnostics.Process -Objekt:$Script = "D:\myscript.ps1" $arguments = "-File $script" $user = "otheruser" $pass = ConvertTo-SecureString "PaSsWoRd" -asplaintext -force $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = "$env:windir\system32\WindowsPowerShell\v1.0\powershell.exe" $psi.Arguments = $arguments $psi.UserName = $user $psi.Password = $pass $psi.UseShellExecute = $false $psi.Verb = "runas" $psi.CreateNoWindow = $true $psi.WorkingDirectory = Get-Location; [void][System.Diagnostics.Process]::Start($psi);
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2013 10:38
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 7. Juni 2013 08:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 10. Juni 2013 10:48
Alle Antworten
-
Hallo Uwe,
du kannst bei den meisten CmdLets die Credentials mitgeben. Ansonsten kannst du auch mit Sessions arbeiten.
Um die Credentials zu erstellen kannst du folgendes nutzen. (ich denke mal das interaktiv mit PHP schwer wird ;-)
- Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 30. Mai 2013 06:39
- Nicht als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Samstag, 1. Juni 2013 12:07
-
Hallo Uwe,
Ist die Thematik geklärt? Wenn ja - bitte markiere den Beitrag von Malte "als Antwort".
Viele Grüße,
AlexAlex Pitulice, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
-
Hi Uwe,
ich denke das es sich um nen Flüchtigkeitfehler handelt, es sollte jedoch Add-PSSnapin heißen.
Was kommt denn raus wenn du "Add-PSSnapin $path" ausführst ?
Was erhälst du wenn du "[diagnostics.process]::GetCurrentProcess().path" ausführst?
(Beides ohne "" :-)
Gruß Malte
-
Grundsätzlich ist es wohl so das das Ausführen des Exchange2010-Snappins in Scripten offenbar nicht supported ist. Was eine schnelle Websuche so zeigt, wirst du selbst wenn du das Cred/Snappin Problem gelöst hast, noch auf einige andere Probleme stoßen. Aber:
Warum muß es denn das Exchange-Snapin sein, wenn du nur einen User im Ad anlegen willst? Das geht auch prima mit ADSI: (siehe z.b. hier: LINK)
Und grundsätzlich: Warum führst du nicht das gesamte Powershellscript unter dem Account mit den entsprechenden AD-Rechten aus? Selbst wenn das mit PHP nicht gehen sollte, kannst du auch z.b. powershell ein zweites Script mit anderen Credentials starten lassen, in dem die ADSI-Befehle ausgeführt werden.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Samstag, 1. Juni 2013 12:19
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 7. Juni 2013 08:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 10. Juni 2013 10:48
-
Hi,
vielen Dank für die Antworten.
Ich möchte auch den ExchangeUser einrichten. Das mit dem AD User geht - kein Problem.
Das mit dem zweiten Script hatte ich auch schon versucht - habe es aber irgendwie nicht zum laufen gebracht.
Hast Du da ein Beispiel?
Danke.
Gruß
Uwe
-
Vorweg: ein grundsätzliches Problem bei dieser Lösung ist die Tatsache, das du das Passwort irgendwo hinterlegen musst. Dafür gibts (Google) diverse mögliche Ansätze, alle haben aber eines gemeinsam: sie sind alle mehr oder weniger unsicher.
Das wissend, geht das ganze aber z.b. über ein System.Diagnostics.Process -Objekt:$Script = "D:\myscript.ps1" $arguments = "-File $script" $user = "otheruser" $pass = ConvertTo-SecureString "PaSsWoRd" -asplaintext -force $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = "$env:windir\system32\WindowsPowerShell\v1.0\powershell.exe" $psi.Arguments = $arguments $psi.UserName = $user $psi.Password = $pass $psi.UseShellExecute = $false $psi.Verb = "runas" $psi.CreateNoWindow = $true $psi.WorkingDirectory = Get-Location; [void][System.Diagnostics.Process]::Start($psi);
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2013 10:38
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 7. Juni 2013 08:48
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 10. Juni 2013 10:48