この記事は1年以上前に投稿された記事で現在は正しい情報とは限りません。

Windowsのファイル共有に関して、コマンドで自動化するための情報を備忘として残しておきます!

NTFSのアクセス権限の操作

いきなりファイル共有関係無さそうな内容ですが、ファイル共有をする場合のアクセス権限はファイル共有の権限とNTFSのアクセス権限の組み合わせになるので、必須の設定になります。

アクセス権限を付与する場合は以下のような感じ

後ろの権限を表すパラメータFはフルコントロール、(OI), (CI)は”このフォルダー、サブフォルダーおよびファイルに対して権限付与”という意味です。詳細はこちらを参照↓

権限を削除したい場合は以下のコマンドで

ファイル共有の作成

この設定をしておかないとSMB/CIFS経由でアクセスできません。

全ユーザに対して共有するのであればusernameにeveryoneを設定すればOK。

ユーザ管理のコマンド

ユーザ作成

グループ作成

グループにユーザを追加

コマンドでファイル共有にログイン

ファイル共有に対して任意のユーザでログインして、アクセス権限が適切かどうかを確認することができます。以下のコマンドでログインします。

ログアウトはこちら

ログアウトしてもsessionが切れない場合はファイル共有サーバ上で、コントロールパネル>管理ツール>コンピュータの管理から共有フォルダー>セッションを選択して、対象のセッションを切断すれば良いです。

ファイル権限テストの自動化

今までの「ログイン」「ログアウト」とファイル権限テストのメソッドを組み合わせることで、ファイル権限のテスト自動化ができます。Pythonで権限確認を行うプログラムを書くとこんな感じになります。

本当はos.accessで詳細を確認したかったんですが、pythonでNTFSの権限をos.accessで調べれないようだったので直接のファイル読み込み+エラーハンドリングでやっています。ディレクトリは書き込み権限が無くてもos.W_OKの結果がTrueだったり、正確な権限を確認できませんが、読み込み以上の権限があるかどうかはos.accessで確認できそうです。調べてませんが、.NETとかだったらNTFSの親和性高そうな気がするので、アクセス権限確認の自動化プログラムがもうちょい楽に確実に書けるのかもしれないです。

ファイル共有時の注意点

ファイル共有上でファイル、フォルダ削除するとゴミ箱に行かずに完全に消えます。ミスオペによる障害を解消するには、シャドウコピーをとって世代管理するか、定期的なフルバックを行うようにします。詳細は以下参照。

ユーザ名とパスワードがファイル共有サーバとアクセス元で異なる場合は、ログインプロンプトが表示されます。そのため、ファイル共有サーバへのシームレスなアクセスをしたい場合は、ユーザ名とパスワードを同じにしておけばOKです。
アクセスできないときはファイル共有とアクセス権限が適切かどうか、クレデンシャルが正しいかどうかを確認します。ユーザ名はwhoamiやecho %USERNAME%で確認可能です。