2012-07-06 19 views
7

Ich habe die Aufgabe des Schreibens Powershell-Skripts zum Einrichten eines Servers von Grund auf einen unserer Dienste als Teil einer Webanwendung und einer der erforderlichen Schritte zum Einrichten dieses Servers up ändert die DCOM-Konfiguration für den installierten Dienst, fügt den Berechtigungen "Starten und Aktivieren"/"Zugriff" Konten hinzu und legt auch die Berechtigungen für diese Konten fest, sobald sie hinzugefügt wurden.Ändern Sie DCOM Config Sicherheitseinstellungen mit Powershell

Gibt es eine Methode, dies mit Powershell überhaupt zu tun? Ich war nicht in der Lage, eine konkrete Methode zu finden, was ich erreichen möchte, so würde jede Hilfe groß sein

Antwort

12

Sieht aus wie Sie es mit WMI tun würden.

Erhalten Sie eine Instanz: Win32_DCOMApplicationSetting wie folgt aus:

$dcom = Get-WMIObject -Class Win32_DCOMApplicationSetting -Filter 'Description="Something"' 

Jetzt haben Sie Zugriff auf die SetAccessSecurityDescriptor und SetLaunchSecurityDescriptor Methoden.

Von: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384905(v=vs.85).aspx

DCOM-Anwendungen haben

DCOM Anwendungsinstanzen mehrere Sicherheitsbeschreibungen. Starten Sie mit Windows Vista, verwenden Sie Methoden der Klasse Win32_DCOMApplicationSetting , um die verschiedenen Sicherheitsbeschreibungen zu erhalten oder zu ändern. Sicherheit Deskriptoren werden als Instanzen der Klasse Win32_SecurityDescriptor zurückgegeben.

Um Konfigurationsberechtigungen abzurufen oder zu ändern, rufen Sie die Methoden GetConfigurationSecurityDescriptor oder SetConfigurationSecurityDescriptor auf. Um die Zugriffsberechtigungen abzurufen oder zu ändern, rufen Sie die Methoden GetAccessSecurityDescriptor oder SetAccessSecurityDescriptor auf.

Um die Start- und Aktivierungsberechtigungen abzurufen oder zu ändern, rufen Sie die Methoden GetLaunchSecurityDescriptor oder SetLaunchSecurityDescriptor auf.

Windows Server 2003, Windows XP, Windows 2000, Windows NT 4.0 und Windows Me/98/95: Die Sicherheitsbeschreibung "Win32_DCOMApplicationSetting" ist nicht verfügbar.

Es gibt auch ein Tool namens DCOMPERM, in dem Quellcode in dem Windows SDK verfügbar: http://www.microsoft.com/en-us/download/details.aspx?id=8279

Sie Versionen zusammengestellt finden können um online, wenn Sie für DCOMPERM zusammengestellt suchen.

Hier sind die Befehlszeilenoptionen:

Syntax: dcomperm <option> [...] 
Options: 

Modify or list the machine access permission list 
-ma <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-ma list 

Modify or list the machine launch permission list 
-ml <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-ml list 

Modify or list the default access permission list 
-da <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-da list 

Modify or list the default launch permission list 
-dl <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-dl list 

Modify or list the access permission list for a specific AppID 
-aa <AppID> <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-aa <AppID> default 
-aa <AppID> list 

Modify or list the launch permission list for a specific AppID 
-al <AppID> <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-al <AppID> default 
-al <AppID> list 

level: 
    ll - local launch (only applies to {ml, dl, al} options) 
    rl - remote launch (only applies to {ml, dl, al} options) 
    la - local activate (only applies to {ml, dl, al} options) 
    ra - remote activate (only applies to {ml, dl, al} options) 
    l - local (local access - means launch and activate when used with {ml, dl, al} options) 
    r - remote (remote access - means launch and activate when used with {ml, dl, al} options) 
+0

Danke Andy, das hat sehr geholfen! Am Ende habe ich eine Mischung aus beiden Methoden verwendet. Ich habe Win32_DCOMApplicationSetting verwendet, um die App-IDs abzurufen, und anschließend DComPerm zum Hinzufügen der erforderlichen Berechtigungen verwendet. Etwas seltsam fand ich, dass CMD DcomPerm mit weniger Problemen als Powershell ausführte. Um das zu erreichen, was ich brauchte, schrieb ich eine Batch-Datei, in der bestimmte Variablen übergeben wurden und diese von Powershell aufgerufen wurde. – Vermin

+0

@Vermeine meine Vermutung wären die Probleme, die Sie mit PowerShell hatten, sind wahrscheinlich Syntax/Befehlszeile Parsing verwandt. Vielleicht posten Sie den Fehler, den Sie bekommen haben? –

7

ich die gleiche Frage wie die OP hatte. Die Antwort, die Andy gab, war sehr hilfreich und brachte mich zur Hälfte. Ich habe dann die Set-DCOMLaunchPermissions von jemandem geschrieben, um ihnen bei der Bereitstellung von SharePoint zu helfen.

Ich passte ihre Funktion für meine Zwecke an und kam mit einer Lösung, die die Berechtigungen setzt, die ich brauche.

$user = "sql2012agent" 
$domain = "MYDOMAIN" 
$appdesc = "Microsoft SQL Server Integration Services 11.0" 
$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE Description = "' + $appdesc + '"') -enableallprivileges 
#$appid = "{83B33982-693D-4824-B42E-7196AE61BB05}" 
#$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE AppId = "' + $appid + '"') -enableallprivileges 
$sdRes = $app.GetLaunchSecurityDescriptor() 
$sd = $sdRes.Descriptor 
$trustee = ([wmiclass] 'Win32_Trustee').CreateInstance() 
$trustee.Domain = $domain 
$trustee.Name = $user 
$fullControl = 31 
$localLaunchActivate = 11 
$ace = ([wmiclass] 'Win32_ACE').CreateInstance() 
$ace.AccessMask = $localLaunchActivate 
$ace.AceFlags = 0 
$ace.AceType = 0 
$ace.Trustee = $trustee 
[System.Management.ManagementBaseObject[]] $newDACL = $sd.DACL + @($ace) 
$sd.DACL = $newDACL 
$app.SetLaunchSecurityDescriptor($sd) 
+0

Ich versuche, das PS-Skript von @Elijah W. Gagne oben zu konfigurieren, um DCOM zu konfigurieren, und bekomme den Fehler "Die Eigenschaft 'DACL' kann nicht für dieses Objekt gefunden werden. Stellen Sie sicher, dass die Eigenschaft vorhanden ist und festgelegt werden kann." Der Fehler betrifft die Zeile "$ sd.DACL = $ newDACL". Ich bin nicht sehr versiert in PS-Nutzung. Kann mir jemand sagen, was ich tun muss, um diese Arbeit zu machen? Vielen Dank! – RGuggisberg

+0

Ich würde Dinge bis Zeile 4 ausführen. Dann geben Sie die $ app-Variable und bestätigen Sie, dass es nicht leer ist (null). Wenn dies der Fall ist, müssen Sie wahrscheinlich Ihre WHERE-Klausel in Zeile 4 anpassen. –

+0

Ja, ich musste meine Version ändern, da ich Version 12.0 und nicht 11.0 verwendete und die $ app als null erkannte. Aber nachdem ich die $ appdesc geändert hatte, um für mich das Richtige zu sein, hat das Skript einen Reiz ausgelöst. –

Verwandte Themen