2016-04-04 21 views
0

Aşağıdaki örnekte listelenen kullanıcı adı, Kimlik Referansı ve Erişim Denetimi Türü'ne nasıl ulaşılacağını bana söyleyebilir misiniz?

Username   IdentityRefrerance  AccessControlType 
fred    BuiltIn\Account Operator Allow

Aşağıdaki PS komut dosyasını oluşturdum ancak kullanıcı adı geçemedim.

Import-Module ActiveDirectory 
Set-Location AD: 
$Users = Get-ADUser -Filter * | % {$_.SamAccountName} 

foreach ($User in $Users) { 
    (Get-Acl (Get-ADUser -Identity $User).DistinguishedName).Access | 
    Where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} return true | 
    select IdentityReference, AccessControlType 
} 
+0

% 'foreach' için bir kısa yoldur. '$ Users = Get-ADUser -Filter kullanın * | DistinguishedName, SamAccountName} 'yerine, $ Kullanıcılar = Get-ADUser -Filter * | Daha sonra DN'ye başvuracağınız gibi% {$ _. SamAccountName}. ACL'yi sorgulamak için bir başvuru nesnesine ihtiyacınız var. Tüm erişim haklarını sadece * (her şey) olarak listeleyemezsiniz. Ayrıca get-childitem vb cmdlet'lerle çalışmıyorsanız, set-Location AD'ye ihtiyacınız yoktur. – Martin

+0

@Martin AD nesnelerinin ACL'lerini kontrol etmek istiyor, bu yüzden konumu kesinlikle "AD:" sürücüsüne değiştirmek gerekiyor. –

+0

Ayrıca, drive ile '-path 'belirtirseniz:" get-acl -path "AD: \ $ ($ user.DistinguishedName)" | select -ExpandProperty access | ft' – Martin

cevap

1

Gerek iki kez veya çağrı Get-ADUser birden çok kez. Sadece ilk Get-ADUser tarafından döndürülen nesneler üzerinde Get-Acl çalıştırmak ve calculated property ile kullanıcı adı ekleyin:

Get-ADUser -Filter * | ForEach-Object { 
    $username = $_.SamAccountName 
    (Get-Acl $_.DistinguishedName).Access | 
    Where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} | 
    Select-Object @{n='Username';e={$username}}, IdentityReference, 
        AccessControlType 
} 
+0

Teşekkürler Ansgar o bir muamele çalıştı eğer bir eşleşirse doğru geri dönen var. – delboy82

+0

@ delboy82 Bu bağlıdır. "Doğru" dönmenin amacı nedir? Nereye dön? Her maç için ya da herhangi bir eşleşme elde ederseniz? –

0

Bu, ilk bakışta biraz zor. Ama cevap aslında oldukça kolay!

Get-ADUser komutunu çalıştırdığımız SamAccountName özelliğinin olmasını istersiniz. Bu sonuçların her birini ForEach($user in $users) kullanarak yaptığımız için, bu özelliğe $user.SamAccountName kullanarak istediğiniz zaman başvurabilirsiniz.

Bunu Yapmaya çalıştığın şeyin yakalar düşünüyorum: döngü

foreach ($User in $Users) { 
    (Get-ACL (Get-ADUser -Identity $User).distinguishedname).access | 
    where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} return true | 
    select $user.SamAccountName, identityreference, accesscontroltype 
} 
İlgili konular