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


9

バックグラウンド

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

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

これは英語版のWindowsでは正常に機能しますが、フランス語版では機能しないようで、おそらくUsersフランス語で異なるために次のエラーが発生します。WindowsのようにEveryone翻訳さ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なるかについて説明しています。JederTout le monde


2
SIDを使用するだけです:icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F どこでも機能します。
ベン

2
@ベン、それはそうであるはずですicacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F、あなたはアスタリスクを省きました。
ハリージョンストン

回答:


10

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

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

  1. 言語ポータルを使用して翻訳された名前を取得する

  2. UsersSID からローカライズされた名前を取得する

  3. UsersSIDを使用するicacls


オプション1:言語ポータルを使用する(Microsoft用語集の正規リソース)

ユーザーを検索すると、次が返されます。

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

    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:UsersSID からローカライズされた名前を取得する(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:UsersSIDを使用するicacls

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

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

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


バッチまたはPSスクリプトを使用する場合に最適な、真のコマンドラインの方法でそれを行うため、DavidPostillからの回答を受け入れました。最後に、C#で実際に小さな実行可能ファイルを作成しました。これは、パスを取得し、必要なことを正確に実行します。これは、ここでの回答ほどカスタマイズ可能ではなく、.NET Frameworkが必要ですが、私の特定の目的には非常に適しています。誰かが興味を持っているなら、これが私が最終的に使ったC#コードの基礎です。stackoverflow.com/a/35461832/1639615
Geesh_SO

xcaclsダウンロード可能なスクリプトのようです。必要がない; icaclsWindowsに組み込まれており、同じ仕事をすることができます。
ハリージョンストン

@HarryJohnston正解ですが、私の答えはローカライズされたバージョンの取得方法を示していますUsers... xacls引用されたソリューションの一部は必要ないため、答えを明確にしました。
DavidPostill

@HarryJohnston icaclsクレジットを使用して直接使用することも追加しました。
DavidPostill

7

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

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

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

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

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

SRX-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、管理者)

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


すべてのユーザーがデフォルトでユーザーグループの一部であることを指摘する価値があります。したがって、「フルアクセス:すべてのユーザーアカウントにアクセス権を付与する場合は、SIDを使用しS-1-5-32-544、ACLを変更して、問題のファイルまたはフォルダーのグループにすべてのアクセス許可を付与します
Ramhound

@Ramhound 544は管理者、545ユーザーです。
DavidPostill

@DavidPostill-はい。エラーをコピーして貼り付けます。
ラムハウンド2017

@ラムハウンドはるかに良い。電話をかけている間、私ができることは最高でした。編集ありがとうございます。
Tonny 2017

3

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.SecurityIdentifier から securityi
  • System.Security.Principal.WellKnownSidType から wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule から filesystem

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

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

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name

SidなしでFileSystemAccessRuleを使用してgroup names
Kiquenet

@Kiquenet私はあなたが何を求めているのか完全にはわかりませんが、人間が読めるグループ名を指定したい場合、言語に依存しなくなります。それでよければ、その$sid =行を削除して$sid、その$rule =行をグループを識別する文字列に置き換えることができます。
ベンN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.