web-dev-qa-db-ja.com

Windowsの言語に関係なく、ICACLSコマンドでフォルダーを設定して、全員にフルアクセスできるようにするにはどうすればよいですか?

背景

このコマンドがあるとしましょう

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

これは英語バージョンのWindowsでは正常に機能しますが、フランス語バージョンでは機能しないようで、おそらくフランス語でUsersが異なるために次のエラーが発生します。 EveryoneはWindowsではTout le mondeに変換されるため、これも解決策ではありません。

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

どのGoogleが翻訳するか

Users: The mapping between account names and security IDs was not performed.

質問

Windowsのさまざまな言語バージョンで機能するように、フォルダーとその内容すべてを再帰的に設定して、すべてのユーザーに完全なアクセス許可を与えるコマンドはありますか?

ウェブ全体のコンテンツ

このページ ほぼ同様の問題で、Everyoneがドイツ語でJederになり、フランス語でTout le mondeになる方法について説明しています。

9
Geesh_SO

おそらくUsersが異なるため、フランス語版では機能しません

以下の3つのオプションがあります。

  1. Language Portal を使用して、翻訳された名前を取得します。

  2. Users SIDからローカライズされた名前を取得します

  3. Usersicacls SIDを使用する


オプション1: Language Portal (Microsoft用語集の正規リソース)を使用します。

sers を検索すると、次が返されます。

ローカライズされたマイクロソフト製品の翻訳

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

これは、次のコマンドが機能する可能性があることを示唆しています。

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

オプション2:Users SID(S-1-5-32-545

SID:S-1-5-32-545

名前:ユーザー

説明:組み込みグループ。オペレーティングシステムの初期インストール後、唯一のメンバーはAuthenticated Usersグループです。コンピューターがドメインに参加すると、ドメインユーザーグループがコンピューターのユーザーグループに追加されます。

ソース Windowsオペレーティングシステムの既知のセキュリティ識別子

ローカライズされたUsersグループ名を取得するには:

この単純なスクリプトは、「ユーザー」の実際の名前を提供します(S-1-5-32-545)特定のPC上のグループ:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

それをvbs拡張子の付いたファイルに入れます(usersName.vbs)。

今実行します:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

ソース Cacls、Windows 7、完全なアクセス許可、ローカル名wmz


オプション3:Usersicacls SIDを使用する

次のコマンドを使用します。

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

Harry Johnston によるソースコメント

10
DavidPostill

ADグループは、名前ではなくSID番号で指定する必要があります。
「EveryOne」、「ドメインユーザー」などの標準グループの場合、標準化されたSID番号があります。これは、MSDNページにあります 既知のセキュリティ識別子(SID)

以下は、最も一般的な相対識別子です。

enter image description here

SIDの構造は次のとおりです。

標準表記を使用してSIDをバイナリ形式から文字列形式に変換すると、SIDのコンポーネントを視覚化しやすくなります。

S-R-X-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

たとえば、組み込みのAdministratorsグループのSIDは、標準化されたSID表記で次の文字列として表されます。

S-1-5-32-544

このSIDには4つのコンポーネントがあります。

  • 改訂レベル(1)

  • 識別子機関の値(5、NT機関)

  • ドメイン識別子(32、組み込み)

  • 相対識別子(544、管理者)

セキュリティ識別子の仕組み

7
Tonny

PowerShellスクリプトは好きだが、SIDの番号を思い出せない場合:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

これは大量の入力のように見えますが、これらの長い識別子はタブ補完されています。

  • System.Security.Principal.SecurityIdentifiersecurityiから
  • System.Security.Principal.WellKnownSidTypewellknownsiから
  • System.Security.AccessControl.FileSystemAccessRulefilesystemから

これらの文字列はすべて.NET識別子であるため、ローカライズされません。

代わりにEveryone SIDが必要な場合は、WorldSidの代わりにBuiltinUsersSidを使用してください。すべてのWellKnownSidTypeオプションのリストを取得するには、 MSDNを参照 または次のコマンドを実行します。

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
3
Ben N