2

よろしくお願いします。

したがって、ユーザーを削除したいファイルとフォルダーが何百もあります:C850-108。これはWindowsインターフェイスを使用して実行できますが、すべてのファイルで実行するには数日かかります。

これを実行したい理由は、Cobianバックアップツールがこのファイルにアクセスできないため(アクセスが拒否された)、ユーザーが問題であると考えているためです。

だから私はこの退屈な仕事で私を助けるためにCygwin(bash)PowerShellを持っています。

3つのスクリーンショットを添付します。

  1. [Windowsのセキュリティ]タブ

    ここに画像の説明を入力してください

  2. コマンドのPowerShell出力get-acl | format-list

    ここに画像の説明を入力してください

  3. Cygwinの出力getfacl

    ここに画像の説明を入力してください

私はbashの経験が豊富なので、次のようなユーザーを追加してみました。

 setfacl.exe -m u:rafaelgp:rwx myfile

これは明らかに何もしませんでしたが、PowerShellで確認すると、実際に機能し、指定されたアクセス許可を持つ新しいユーザー(rafaelgp)が追加されたことがわかりました。これはスクリーンショットで確認できます。そのため、この後、Cygwinへの信頼を失いました。

私もこのようにユーザーを削除しようとしました:

setfacl.exe -d u:C850-108 myfile

しかし、次のメッセージが表示されます。

setfacl: illegal acl entries

それで、なにかお手伝いできますか?私が言ったように、私はbashまたはPowerShellを使用して何でも試して満足しています。

乾杯!

アップデート:

MusaabAl-Okaidiソリューションのスクリーンショット。'$file'パラメータに問題があるようです

ここに画像の説明を入力してください

4

2 に答える 2

0

最も簡単な方法は、間違いなく次のicaclsとおりです。

icacls file /remove C850-180

ただし、これを使用して親フォルダーから継承されたアクセス許可を削除することはできません。setfaclこれが失敗した理由だと思います。残念ながら、の出力をにパイプすると、継承情報は抑制Get-AclされFormat-Listます。代わりにこれを試してください:

Get-Acl file | % { $_.Access } | ? { $_.IdentityReference -match 'C850-180' }

プロパティはIsInherited、ACLが継承されているかどうかを示します。ACLが継承されている場合は、ACLを削除する前に、まず継承を無効にする必要があります。

icacls file /inheritance:d

icaclsWindows Server2003SP2以降で使用できます。

アップデート:

オプションを追加することにより、これをフォルダツリーに再帰的に適用できます/t

icacls C:\some\folder\* /t /inheritance:d
icacls C:\some\folder\* /t /remove C850-180

ただし、アクセス許可の管理が悪夢になるため、継承を再帰的に無効にすることはお勧めできません。フォルダ構造によっては、親フォルダから継承とその特定のACEを削除する方がよい場合があります。

icacls C:\some\folder /inheritance:d
icacls C:\some\folder /remove C850-180

サブフォルダーとファイルは、親フォルダーの変更されたアクセス許可を自動的に継承します。必要に応じて、サブフォルダーとファイルのアクセス許可をリセットすることで、これを強制できます。

icacls C:\some\folder\* /reset /t /c
于 2013-02-13T10:12:32.807 に答える
0

次の関数をシェルに追加し、コピーして貼り付けるだけでRemove-UserAccess、使用可能なコマンドレットとして使用できるようになります。

Function Remove-UserAccess()
{
   Param
   (   
      [Parameter(Mandatory=$true)][String]$Path,
      [Parameter(Mandatory=$true)][String]$User      
   )

   $Files = New-Object System.Collections.ArrayList
   $Files.Add($Path) | Out-Null

   #Add all files and folders to an array
   $PathSubtree = Get-ChildItem -Path $Path -Recurse
   Foreach ( $File in $PathSubtree )
   {
      $Files.Add($File.FullName) | Out-Null
   }

   # Remove access of the $User from each file in the array
   Foreach ( $File in $Files )
   {
      $AccessRule = Get-Acl $File | % { $_.Access } | ? {  $_.IdentityReference -eq $User}
      IF ( $AccessRule -eq $null )
      {
         Write-Host "$User does not have access to $File" -ForegroundColor Yellow
      }
      ELSE
      {
         $ACL = Get-Acl $File
         $ACL.RemoveAccessRule($AccessRule) | out-Null
         Set-Acl -Path $File -AclObject $ACL -ErrorAction Stop
         Write-Host "Permissions for $user have been removed from the following path: $File" -ForegroundColor Green
      }
   }
}

次のようにコマンドを実行します。

Remove-UserAccess -Path C:\temp -User RAFALAPTOP\C850-108

これにより、C:\tempおよびすべてのサブファイルとフォルダーからユーザーのアクセスが削除されます。

于 2013-02-13T10:09:05.053 に答える