none
SnapIn hinzufügen RRS feed

  • 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

    Montag, 27. Mai 2013 12:03

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".

    Samstag, 1. Juni 2013 12:16
    Moderator
  • 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".

    Dienstag, 4. Juni 2013 10:38
    Moderator

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 ;-)

    http://blogs.technet.com/b/robcost/archive/2008/05/01/powershell-tip-storing-and-using-password-credentials.aspx

    Gruß Malte 

    Dienstag, 28. Mai 2013 15:59
  • Hallo,

    vielen Dank. Aber genau bei dem Befehl gibt es das nicht - nämlich : AddPSSnapIn . Ich möchte die Exchange Commandlets hinzufügen.

    Auch mit weiteren Sessions gibt es Probleme, da die Scripte ja als IUSR User aufgerufen werden.

    Gruß

    Uwe

    Donnerstag, 30. Mai 2013 13:51
  • 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

    Donnerstag, 30. Mai 2013 17:29
  • 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".

    Samstag, 1. Juni 2013 12:16
    Moderator
  • 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

    Dienstag, 4. Juni 2013 09:53
  • 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".

    Dienstag, 4. Juni 2013 10:38
    Moderator