Windowsコマンド(icacls)(その6)

今回はこのオプションです。

ICACLS <名前> /setowner <ユーザー> [/T] [/C] [/L] [/Q]
    すべての一致する名前の所有者を変更します。このオプションでは、所有権の
    変更を強制することはできません。所有権を変更するには、takeown.exe
    ユーティリティを使用してください。

現在、カレントディレクトリには、ファイルが2つあります。

C:\Users\takk\Desktop>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 20C6-F2AA です

 C:\Users\takk\Desktop のディレクトリ

2019/01/26  21:41    <DIR>          .
2019/01/26  21:41    <DIR>          ..
2019/01/26  20:35                 8 test.txt
2019/01/26  20:35                 8 test2.txt
               2 個のファイル                  16 バイト
               2 個のディレクトリ  178,863,869,952 バイトの空き領域

C:\Users\takk\Desktop>

dirの/qオプションで ファイルの所有者を確認することができます。

C:\Users\takk\Desktop>dir /q
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 20C6-F2AA です

 C:\Users\takk\Desktop のディレクトリ

2019/01/26  21:41    <DIR>          DESKTOP-TRO4JUU\takk   .
2019/01/26  21:41    <DIR>          BUILTIN\Administrators ..
2019/01/26  20:35                 8 DESKTOP-TRO4JUU\takk   test.txt
2019/01/26  20:35                 8 DESKTOP-TRO4JUU\takk   test2.txt
               2 個のファイル                  16 バイト
               2 個のディレクトリ  178,880,303,104 バイトの空き領域

C:\Users\takk\Desktop>

では、icaclsで/setownerを使ってみます。

C:\Users\takk\Desktop>icacls test2.txt /setowner testuser2
test2.txt: このセキュリティ ID はこのオブジェクトの所有者として割り当てられていない可能性があります。
0 個のファイルが正常に処理されました。1 個のファイルを処理できませんでした

C:\Users\takk\Desktop>

あれっ。できません。ヘルプの説明には、「このオプションでは、所有権の変更を強制することはできません。所有権を変更するには、takeown.exe ユーティリティを使用してください。」 とありましたので、takeownを使ってみます。

使ってみます。

C:\Users\takk\Desktop>takeown
エラー: 構文が無効です。
"TAKEOWN /?" と入力すると使用法が表示されます。

C:\Users\takk\Desktop>

ヘルプは/?のようです。

C:\Users\takk\Desktop>takeown /?

TAKEOWN [/S システム [/U ユーザー名 [/P [パスワード]]]]
        /F ファイル名 [/A] [/R [/D プロンプト]]

説明:
    このツールを使うと、ファイルの所有権を割り当て直して、前回アクセスが拒否
    されたファイルへのアクセスを管理者が回復できるようにします。

パラメーター一覧:
    /S     システム              接続先のリモート システムを指定
                                 します。

    /U     [ドメイン\]ユーザー   コマンドを実行するユーザー
                                 コンテキストを指定します。

    /P     [パスワード]          指定のユーザー コンテキストのパスワード
                                 を指定します。
                                 省略すると入力が促されます。

    /F     ファイル名            ファイル名またはディレクトリ名のパターンを
                                 指定します。ワイルドカード "*" を使って
                                 パターンを指定できます。
                                 '共有名\ファイル名' も使用できます。

    /A                           現在のユーザーではなく、管理者に所有権を
                                 与えます。

    /R                           再帰: 指定されたディレクトリとすべてのサブ
                                 ディレクトリにあるファイルに対してツールを
                                 実行します。

    /D     プロンプト            ユーザーがディレクトリに対し "フォルダーの一覧"
                                 アクセス許可を持っていない場合、既定の答えが
                                 使用されます。これはサブディレクトリに対し                                      再帰的(/R) に操作を行っている場合に適用され
                                 ます。有効な値は "Y" (所有権を得る)、および                                     "N" (スキップ) です。

    /SKIPSL                      シンボリック リンクに接続しません。
                                 /R と同時には指定できません。

    /?                           このヘルプを表示します。

    注意: 1) /A が指定されていない場合は、ファイルの所有権は現在
             ログインしているユーザーに与えられます。

          2) "?" や "*" を使った混合パターンはサポートされていません。

          3) /D を使うと、確認プロンプトは表示されません。

例:
    TAKEOWN /?
    TAKEOWN /F lostfile
    TAKEOWN /F \\system\share\lostfile /A
    TAKEOWN /F directory /R /D N
    TAKEOWN /F directory /R /A
    TAKEOWN /F *
    TAKEOWN /F C:\Windows\System32\acme.exe
    TAKEOWN /F %windir%\*.txt
    TAKEOWN /S システム /F MyShare\Acme*.doc
    TAKEOWN /S システム /U ユーザー /F MyShare\MyBinary.dll
    TAKEOWN /S システム /U ドメイン\ユーザー /P パスワード /F share\ファイル名
    TAKEOWN /S システム /U ユーザー /P パスワード /F Doc\Report.doc /A
    TAKEOWN /S システム /U ユーザー /P パスワード /F Myshare\*
    TAKEOWN /S システム /U ユーザー /P パスワード /F Home\Logon /R
    TAKEOWN /S システム /U ユーザー /P パスワード /F Myshare\directory /R /A

C:\Users\takk\Desktop>

ん~。使い勝手が悪そうですが、ファイルの権限を管理者に変更してみます。

C:\Users\takk\Desktop>takeown /A /F test2.txt
エラー: 現在ログオンしているユーザーには管理者の権限がありません。

C:\Users\takk\Desktop>

なんてことでしょう。うまくいきません。
cmd.exe自体を管理者権限で実行しておく必要があるんでしょうか。
ファイルの所有者が自由に権限を与えられないって何だろう。。。
sudo が使えないって不便ですねえ。

管理者権限で起動したcmd上で、実行すると、もちろん成功します。

C:\Users\takk\Desktop>takeown /A /F test2.txt

成功: ファイル (またはフォルダー): "C:\Users\takk\Desktop\test2.txt" は現在 Administrators グループによって所有されてい ます。

C:\Users\takk\Desktop>

ってことは、icaclsの/setownerも管理者権限で実行すれば、うまくいくのでしょうねえ。

C:\Users\takk\Desktop>icacls test.txt /setowner testuser2
処理ファイル: test.txt
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\Users\takk\Desktop>

所有者を確認してみます。

C:\Users\takk\Desktop>dir /q
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 20C6-F2AA です

 C:\Users\takk\Desktop のディレクトリ

2019/01/26  21:41    <DIR>          DESKTOP-TRO4JUU\takk   .
2019/01/26  21:41    <DIR>          BUILTIN\Administrators ..
2019/01/26  20:35                 8 DESKTOP-TRO4JUU\testusetest.txt
2019/01/26  20:35                 8 BUILTIN\Administrators test2.txt
               2 個のファイル                  16 バイト
               2 個のディレクトリ  178,880,651,264 バイトの空き領域

C:\Users\takk\Desktop>

うわああ、所有者の文字列がファイル列の文字列がかぶって全部見えません。
Windowsコマンドには、げんなりさせられますねえ。

コメント

タイトルとURLをコピーしました