回答:
Vista以降、cacls
は非推奨です。最初の2行のヘルプ行は次のとおりです。
C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.
Displays or modifies access control lists (ACLs) of files
icacls
代わりに使用する必要があります。これは、JohnにD:\test
フォルダとそのすべてのサブフォルダに対する完全な制御権を与える方法です。
C:\>icacls "D:\test" /grant John:(OI)(CI)F /T
MSのドキュメントによると:
F
=フルコントロールCI
=コンテナの継承-このフラグは、下位のコンテナがこのACEを継承することを示します。OI
= Object Inherit-このフラグは、従属ファイルがACEを継承することを示します。/T
=既存のファイルとサブフォルダに再帰的に適用します。(OI
そしてCI
、新しいファイルとサブフォルダにのみ適用されます)。クレジット:@AlexSpenceによるコメント。完全なドキュメントicacls
については、引数なしで" "を実行するか、Microsoftのドキュメントのこことここを参照してください。
C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
ICACLSを使用することもできます。
Usersグループにフォルダへのフルコントロールを付与するには:
>icacls "C:\MyFolder" /grant Users:F
IISユーザーに変更アクセス許可を付与するにはC:\MyFolder
(IISが特定のフォルダーにファイルをR / Wする必要がある場合):
>icacls "C:\MyFolder" /grant IIS_IUSRS:M
あなたがICACLS /を行う場合/?利用可能なすべてのオプションを確認できます。
cacls
、それがなくなったので、icaclsを使用するのはさらに理由です。
/grant Users:(OI)(CI)F
使用するまでは機能しませんでした
Users
他のものと交換する必要がありますか?によるicacls "C:\MyFolder" /grant Users:F
コマンドプロンプトを開き、次のコマンドを実行します。
icacls "c:\somelocation\of\path" /q /c /t /grant Users:F
F
フルアクセスを提供します。
/q /c /t
サブフォルダに権限を適用します。
注:「管理者として実行」が役立つ場合があります。
cacls
コマンドを使用します。こちらの情報をご覧ください。
CACLSファイル/ e / p {USERNAME}:{PERMISSION}
どこ、
/ p:新しい権限を設定します
/ e:パーミッションを編集し、古いパーミッションをそのままにします。つまり、ACLを置き換えるのではなく編集します。
{USERNAME}:ユーザーの名前
{権限}:権限は次のいずれかです。
R-読み取り
W-書き込み
C-変更(書き込み)
F-フルコントロール
たとえば、次のコマンド(Windowsコマンドプロンプトで入力)でRocky Full(F)コントロールを付与します。
C:> CACLSファイル/ e / p rocky:f
次のコマンドを入力して、完全なヘルプを読みます。
C:> cacls /?
cmd.exe
は廃止されておらず、廃止される可能性も低いためicacls
、まったく反対の点ではまったくありません。
破損したアクセス許可:フォルダーとそのサブオブジェクトへのアクセスを回復する
質問への回答で投稿された回答のほとんどにはいくつかのメリットがありますが、IMHOのどれも完全なソリューションを提供しません。権限の設定が破損しているためにフォルダーからロックアウトされている場合、次の(おそらく)Windows 7の完璧なソリューションです。
icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T
以下のためのWindows 10ユーザー/ SIDは、後に指定する必要があります/remove:d
オプション:
icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
。
注:
コマンドは指定されたディレクトリに適用されます。
ユーザー「Everyone」を指定すると、可能なすべてのユーザーが含まれるため、可能な限り広い権限が設定されます。
オプション "/ remove:d"は、明示的なALLOW設定を上書きするため、存在する可能性のある明示的なDENY設定をすべて削除します。これは、新しいALLOW設定を作成する前に必要です。多くの場合DENY設定が存在しないため、これは単なる予防策ですが、申し訳ありませんが安全です。
オプション "/ grant"は、新しいALLOW設定を作成します。これは、存在する可能性のあるすべての明示的なALLOW設定を置き換える( ":r")明示的な許可です。
「F」パラメーター(つまり、作成された許可)は、これに完全な制御権を付与します。
"/ T"パラメータは再帰を追加し、これらの変更を、指定されたディレクトリ(つまり、ファイルとサブフォルダ)内の現在のすべてのサブオブジェクトとフォルダ自体に適用します。
「(OI)」および「(CI)」パラメーターも再帰を追加し、これらの変更を後で作成されるサブオブジェクトに適用します。
。
補遺(2019/02/10) -
Windowsの10のコマンドライン上では、親切ので、ここでそれは、今日の私に示唆されました。Windows 10でテストすることはできませんが、テストしている場合は試してみてください(次にコメントを投稿してください)。
この変更は、最初のステップとしてDENY設定を削除することのみに関係しています。DENY設定が存在しない場合もあるので、そのオプションは何の違いもありません。私の理解では、Windows 7では/ remove:dの後にユーザーを指定する必要はありませんが、それについては間違っているかもしれません。
。
補遺(2019/11/21) -
コマンドを言語に依存しないようにするために、ユーザーastarkは、Everyoneを* S-1-1-0という用語に置き換えることをお勧めします。英語版のWindowsしかインストールしていないので、この提案をテストすることはできませんが、それは妥当なようです。
Invalid parameter "/remove:d"
アカウントをプロビジョニングおよび作成するためのExcel vbaスクリプト。新しいユーザーに、管理者の「x」アカウントを使用してツールによって作成されたフォルダーおよびサブフォルダーへの完全な権限を付与する必要がありました。
caclsは次のようになります。cacls \ FileServer \ Users \ Username / e / g Domain \ Username:C
このコードをWindows 7以降に移行する必要がありました。私の解決策は次のとおりでした:
icacls \ FileServer \ Users \ Username / grant:r Domain \ Username:(OI)(CI)F / t
/ grant:r-指定したユーザーにアクセス権を付与します。アクセス許可は、以前に付与された明示的なアクセス許可を置き換えます。:rがない場合、以前に付与された明示的な権限に権限が追加されます
(OI)(CI)-このフォルダー、サブフォルダー、およびファイル。
F-フルアクセス
/ t-ファイル/ディレクトリに一致するようにすべてのサブフォルダーをトラバースします。
これが私に与えたのは、ユーザーがファイルを読み書きできる、そのフォルダーと作成されたサブフォルダーのみをユーザーが見ることができるこのサーバー上のフォルダーです。新しいフォルダを作成するだけでなく。
XCACLS.VBSは、ACL情報を変更/編集する非常に強力なスクリプトです。c:\ windows \ system32 \ cscript.exe xcacls.vbs helpは、すべてのスイッチとオプションを返します。
公式サポートはマイクロソフトサポートページから入手できます。
XCACLS.VBS
見つけられる場所のリファレンスを提供できますか?
フォルダーの一括作成と権限の付与は、以下のPowerShellスクリプトを使用することで機能します。
Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
$username = $_.foldername
# foldername is the header of csv file
$domain = “example.com”
$folder= "D:\Users"
$domainusername = $domain+“\”+$username
New-Item $folder\$username –Type Directory
Get-Acl $folder\$username
$acl = Get-Acl $folder\$username
$acl.SetAccessRuleProtection($True, $False)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-Acl $folder\$username $acl
}
注:csvファイルに同じドメインユーザー名を作成する必要があります。そうしないと、権限の問題が発生します
優れたポイントカリンダリー
caclsを使用するためのスクリプトがたくさんありましたが、ルートマウントボリュームの例を変更するためのスクリプトが見つからなかったため、それらをicaclsに移動しました。例:d:\ datafolder。最後に、ボリュームを一時ドライブとしてマウントし、秒を適用する以下のスクリプトを作成しました。その後、マウントを解除します。これが、ルートマウントセキュリティを更新できる唯一の方法です。
1は一時ファイルにフォルダーマウントGUIDを取得し、GUIDを読み取ってボリュームを一時ドライブとしてマウントします。X:秒を適用して変更をログに記録し、ボリュームをX:ドライブからのみマウント解除して、マウントされたフォルダーが変更されたり中断されたりしないようにします。次に、適用された秒。
これが私のスクリプトのサンプルです:
**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I
D:\tools\security\icacls.exe %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**
私は管理者であり、スクリプトによっては、ディレクトリ内のすべてのファイルとサブフォルダで自分の名前に "拒否"アクセス許可が設定されています。icacls "D:\test" /grant John:(OI)(CI)F /T
このリストから私の名前から「拒否」権を削除していないように見えるため、コマンドの実行は機能しませんでした。
私のために働いた唯一のことは、icacls "D:\test" /reset /T
コマンドですべての権限をリセットすることです。
これは私のために働いたものです:
アクセスを拒否するフォルダを手動で開きます。
そのフォルダー内の実行可能ファイル/アプリケーションファイルを選択します。
それを右クリックしてProperties->に移動しますCompatibility
今を見てPrivilege Level、それを確認してくださいRun As Administrator
をクリックしChange Settings for all usersます。
これで問題は解決しました。