同じドメインに複数のサーバーがあり、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
}
ありがとう!
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
}
}