web-dev-qa-db-ja.com

PSを使用してディレクトリからオブジェクトまたはユーザーのアクセスを削除します

同じドメインに複数のサーバーがあり、Power-Shellスクリプトで定義されている特定のフォルダーからアクセス許可を削除する必要があります。削除するオブジェクトの名前と、サーバーのリストを指定する必要があります(テキストファイル内のパスも問題ありません)これは、Power Shellを介してこのタスクを実行することは可能ですか?

例:定義済みパス(C:\ PowerShell)、セキュリティタブのオブジェクト名([email protected])、サーバーのリスト(SERVER01、Server02)

Also this was the script that I tried 
$path = "C:\Powershell"
$users = @{}



$users = Get-NTFSAccess $path | Where-Object {$_.Account -ne "DOMAIN\Exclude"} | Select-Object Account



foreach ($user in $users) {
    $removalAccount = $user.Account
    Write-Host "Removing account - $($removalAccount)"
    Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Allow
    Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Deny    
}

ありがとう!

2
Heisenberg

Get-AclとSet-Aclを見たいと思うかもしれません。メソッドを決定する可能性のある変数がいくつかあります。

  • 特定のオブジェクトに対する権限は常に明示的であり、継承されていませんか? (コードに影響します)
  • あなたは各サーバーの管理者ですか?
  • はいの場合、ネットワーク上で各サーバーにどのようにアクセスできますか? (展開方法に影響します)

以下の例-必要なすべてのサーバーへの管理者アクセス権を持つユーザーとしてログオンしたマシンから実行します。サーバーごとに、UNC(\ servername\c $\path)を介してオブジェクトのACLリストを取得し、目的のACLルールを削除してから、変更したACLリストをオブジェクトに適用します。

確かに、UNC経由でアクセスすることは完全ではなく、セキュリティ面で眉をひそめる可能性がありますが、少なくとも以下のコードは、調査する対象の種類を示しているはずです。グループポリシーまたはSCCMのような管理ツールを使用してスクリプトを展開することを検討します。UNCを介してリモートで1回のヒットで実行するのではなく、変更する必要のあるサーバーの数によって異なります:)

$servers = "SERVER1","SERVER2","SERVER3"
$base_path = "\c$\Powershell"
$acl_name = "DOMAIN\User.Name"

foreach ($server in $servers){
    $full_path = ("\\" + $server + $base_path)
    $acl_list = Get-Acl $full_path
    $acls_to_remove = $acl_list.access | where-object {($_.IdentityReference -eq $acl_name) -and ($_.IsInherited -eq $false)}

    foreach ($acl in $acls_to_remove){
        $acl_list.RemoveAccessRule($acl)
        Set-Acl -Path $full_path -AclObject $acl_list
    }

}

https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.security/get-acl?view=powershell-6

https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.security/set-acl?view=powershell-6

1
Adam Collyer