2017-05-01 10 views
0

Est-il possible de définir un accès "Poste de travail" au niveau machine et de lancer des autorisations depuis PowerShell?Autorisations d'accès et de lancement au niveau de la machine DCOM via PowerShell

L'équivalent de

DComPerm.exe -ma set name permit level:l,r 
DComPerm.exe -ml set name permit level:l,r 

Je cherche une solution en utilisant PowerShell 3.0 v. Les serveurs cibles sont Windows Server 2008 R2 et 2012.

My Computer Properties

j'ai trouvé un certain nombre de références pour définir les paramètres de sécurité des applications DCOM. Cependant, je ne peux pas comprendre comment le régler à la machine ou au niveau supérieur.

https://janbk.wordpress.com/2015/03/12/automating-dcom-acl-with-powershell/

Alternative to using DcomPerm.exe and SetAcl.exe in powershell

+0

Comme je l'ai suggéré dans la réponse de référence, ont u regardé dans la classe Win32_DCOMApplicationSetting .. –

+0

Vérifiez ce lien aussi: [Lien] (http://www.powertheshell.com/ reference/wmireference/root/cimv2/win32_dcomapplicationsetting /) –

+0

Je cherche à définir les permissions au niveau machine. Win32_DCOMApplicationSettings semble être uniquement au niveau de l'application. – p0rkjello

Répondre

0

Nous utilisons WMI pour définir des autorisations de lancement. Reportez-vous: https://rkeithhill.wordpress.com/2013/07/25/using-powershell-to-modify-dcom-launch-activation-settings/

Ce cessé de fonctionner après les fenêtres des correctifs de sécurité déployé (Patch #: 4012212, 4012213 et 4012213)

Nous avons converti WIM script Powershell utiliser CIM et qui a pris soin de définir des autorisations de lancement sur DCOM Les objets & fonctionnent avec les correctifs de sécurité. Le code est ci-dessous pour référence:

$ComponentName = "TestComponent" #--- change value as needed 
$Username = "Username"   #--- change value as needed 
$Domain = "Domain"    #--- change value as needed 

# If you already have a CimSession that you used to get the security descriptor, you can leave this line out and use the existing one: 
$CimSession = New-CimSession localhost 

Grant-DComAccessToUser -ComponentName $ComponentName -Username $Username -Domain $Domain 

# Cleanup 
$CimSession | Remove-CimSession 

function Grant-DComAccessToUser { 
    param(
     [Parameter(Mandatory=$true)][string] $ComponentName, 
     [Parameter(Mandatory=$true)][string] $Username, 
     [string] $Domain 
    ) 

    $DCom = Get-CimInstance -Query "SELECT * from Win32_DCOMApplicationSetting WHERE Description LIKE '$ComponentName%'" 

    $GetDescriptor = Invoke-CimMethod -InputObject $DCom -MethodName "GetLaunchSecurityDescriptor"; 

    $ExistingDacl = $GetDescriptor.Descriptor.DACL | Where {$_.Trustee.Name -eq $Username} 

    if ($ExistingDacl) 
    { 
     $ExistingDacl.AccessMask = 11 
    } 
    else 
    { 
     $NewAce = New-DComAccessControlEntry -Domain $Domain -Username $Username 
     $GetDescriptor.Descriptor.DACL += $NewAce 
    } 

    Invoke-CimMethod -InputObject $DCom -MethodName "SetLaunchSecurityDescriptor" -Arguments @{Descriptor=$GetDescriptor.Descriptor}; 
} 

function New-DComAccessControlEntry { 
    param(
     [Parameter(Mandatory=$true)][string] $Username, 
     [string] $Domain 
    ) 

    # Create the Win32_Trustee instance 
    $Trustee = New-Object ciminstance $CimSession.GetClass("root/cimv2", "Win32_Trustee") 
    $Trustee.Name = $Username 
    $Trustee.Domain = $Domain 

    # Create the Win32_ACE instance 
    $Ace = New-Object ciminstance $CimSession.GetClass("root/cimv2", "Win32_ACE") 
    $Ace.AceType = [uint32] [System.Security.AccessControl.AceType]::AccessAllowed 
    $Ace.AccessMask = 11 
    $Ace.AceFlags = [uint32] [System.Security.AccessControl.AceFlags]::None 
    $Ace.Trustee = $Trustee 

    $Ace  
} 
+0

À moins de malentendre quelque chose, ces deux scripts utilisent la classe "Win32_DCOMApplicationSetting". Cette classe fournit le niveau/l'accès au niveau d'application. Je cherche à définir l'accès au "My Computer" ou au niveau supérieur comme indiqué dans la capture d'écran originale. Merci – p0rkjello