2017-05-01 59 views
0

マシンレベルの「マイコンピュータ」アクセス権を設定し、PowerShellからアクセス権を起動することはできますか?DCOMマシンレベルのアクセス権とPowerShell経由の起動権限

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

の同等は、私はPowerShellのV 3.0を使用して解決策を探しています。ターゲットサーバーがWindows Server 2008 R2および2012年

My Computer Properties

ている私は、DCOMアプリケーションのセキュリティ設定を設定するための参照の数を発見しました。しかし、私はマシンやトップレベルでそれを設定する方法を把握することはできません。

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

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

+0

uはWin32_DCOMApplicationSettingクラスに見てきました。.. –

+0

チェックあまりにもこのリンク:[リンク](http://www.powertheshell.com/参照/ wmireference/root/cimv2/win32_dcomapplicationsetting /) –

+0

私はマシンレベルで権限を設定しようとしています。 Win32_DCOMApplicationSettingsはアプリケーションレベルのみにあるようです。 – p0rkjello

答えて

0

私たちは、起動許可を設定するには、WMIを使用してきました。 参照してください:Windowsのセキュリティパッチがロールアウトした後https://rkeithhill.wordpress.com/2013/07/25/using-powershell-to-modify-dcom-launch-activation-settings/

は、これは動作を停止(パッチ#:4012212、4012213、および4012213)を

を私たちは、CIMを使用するためにWIMのPowerShellスクリプトに変換し、それがDCOMに打ち上げ許可を設定するの世話をしましたオブジェクト&はセキュリティパッチで動作します。コードは、参考のために以下の通りです:私が基準の答えで提案したように、

$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

私が何か誤解していない限り、これらのスクリプトは両方とも "Win32_DCOMApplicationSetting"クラスを使用します。そのクラスは、アプリケーションレベルの設定/アクセスを提供します。私は、元のスクリーンショットに示されているように、「マイコンピュータ」またはトップレベルでアクセスを設定しようとしています。ありがとう – p0rkjello

関連する問題