Windowsのnet shareは、実行したPCが公開する共有の一覧表示・作成・停止に使います。共有を作る操作と、別のPCの共有へ接続する操作は別です。接続はnet use、既存共有のアクセス制御の確認・変更はSmbShare PowerShellコマンドレットも使い分けます。
以下は管理者向けの例です。共有先、対象者、公開するデータが承認されている場合だけ変更してください。例のPC名・アカウント・パスは実在する自分の環境へ置き換えます。本記事ではWindows上で実行テストしていません。
まず共有一覧とヘルプを確認する
net share
net share MyShare
net help share
引数なしではこのPCの共有一覧、共有名付きではその共有の詳細を表示します。他PCの共有を作成する指定ではありません。作成・変更・停止は共有元PCで、権限を持つ管理者が昇格したコマンドプロンプトから実行します。
C$やADMIN$などの管理共有、IPC$も一覧に現れることがあります。フォルダ共有と同じ目的とは限らないため、見慣れないという理由で停止しないでください。末尾の$は一覧の参照時に見えにくくするだけで、認証やアクセス制御の代わりにはなりません。
フォルダを限定したユーザーへ新規共有する
例では既存の専用フォルダC:\ShareData\ReportsをMyShareとして、共有元PCのMYPC\ShareReaderへ読み取り許可します。ユーザーは事前に存在するものとし、Public全体やドライブ全体を練習用に公開しません。
net share MyShare="C:\ShareData\Reports" /GRANT:MYPC\ShareReader,READ
これは未使用の共有名で新しく作成する例です。既にMyShareがあるときに何度も実行して上書き・権限変更する手順ではありません。パスに空白がある場合も二重引用符で囲みます。ドメインユーザーならDOMAIN\ユーザー名のように対象を明確にします。
READは読み取り、CHANGEは変更、FULLはフルコントロールの共有権限です。必要な操作だけ許可し、便利だからという理由でEveryone,FULLを使わないでください。複数の宛先へ許可する場合は、次のように/GRANTを複数指定できます。
net share TeamData="C:\ShareData\Team" /GRANT:CONTOSO\TeamReaders,READ /GRANT:CONTOSO\TeamEditors,CHANGE
共有権限とNTFS権限は別に確認する
共有を作っても、フォルダのNTFS権限が自動的に意図どおりへ変更されるわけではありません。ネットワーク経由の利用には共有側とファイルシステム側の双方で許可が必要です。複数のグループ所属や拒否設定も関係するため、対象ユーザーで読み取り・書き込みの結果を確認します。
icacls "C:\ShareData\Reports"
上記はNTFS側の表示用です。共有側は管理者のPowerShellで次を確認できます。表示結果には利用者名などが含まれるので、外部へ相談するときは不要な情報を伏せてください。
Get-SmbShare -Name 'MyShare'
Get-SmbShareAccess -Name 'MyShare'
既存共有のアクセス権を変更するとき
新規作成用の「net share 名前=パス /GRANT:…」を、既存ACLを置き換えるコマンドとして使わないでください。管理者が現在の共有ACLとNTFS ACLを記録し、共有のプロパティまたはSmbShareコマンドレットで必要な対象だけ変更します。
Grant-SmbShareAccess -Name 'MyShare' -AccountName 'MYPC\ShareReader' -AccessRight Read -WhatIf
これは変更予定の確認です。承認した対象・権限であることを確認してから-WhatIfを外して実行し、Get-SmbShareAccessで再確認します。Grantは許可エントリを追加する操作で、他の利用者の許可を全て消したり、既存の広い許可を自動的に読み取りへ制限したりする保証はありません。
既存の許可を取り除くRevoke-SmbShareAccessは、その対象者の許可エントリを削除します。一時的なアクセス断や別グループ経由の許可も考慮し、広い権限の整理は管理者が変更計画を立てて行います。アクセスできないという理由だけでEveryone追加やNTFS権限の一括リセットをしないでください。
説明・同時アクセス数・共有名の変更
既存共有の説明やユーザー数の指定では、共有名を指定して変更します。次はMyShareが既にある場合の例です。OSの接続上限やライセンス上の制限を解除するものではありません。
net share MyShare /REMARK:"Approved reports"
net share MyShare /USERS:10
共有名を変えるとUNCパスも変わり、アプリや利用者の参照が切れます。net shareに単純な名前変更操作はありません。新しい共有を設ける場合は既存の対象パス・権限・キャッシュ設定などを記録し、利用者の切替と確認を終えてから古い共有を停止する計画を立てます。既存共有をいきなり削除して作り直さないでください。
共有を停止する:元ファイルは削除されない
net share MyShare /delete
/deleteが止めるのは共有の公開であり、元フォルダやファイルの削除ではありません。利用中の接続には影響があるため、保存中の作業や開いているファイルを確認し、利用者へ周知してから実行します。確認表示が出たら内容を読み、無条件に承認するスクリプトにはしません。
net share
対象共有が一覧からなくなったことと、元フォルダが残っていることを確認します。同じフォルダが別名の共有から公開されている場合、その別の公開まで止まるわけではありません。
共有へ接続するにはnet useを使う
net use X: \\MYPC\MyShare /persistent:no
これは接続する側のPCで実行する例です。X:が未使用であることと対象サーバーを確認します。ネットワークドライブを外すnet use X: /deleteは、そのクライアントの割り当て解除であり、サーバーの共有停止とは異なります。パスワードをバッチに平文保存しないでください。
バッチで作成するときは失敗を検知する
複数共有を一括公開する前に、1つの検証用共有で確認します。以下は1件だけ作成し、失敗時に成功メッセージを出さず終了する例です。既存共有の権限を勝手に変更する目的では使いません。
@echo off
net share DemoShare="C:\ShareData\Demo" /GRANT:MYPC\ShareReader,READ
if errorlevel 1 (
echo Share creation failed. Review the error above.
exit /b 1
)
net share DemoShare
if errorlevel 1 exit /b 1
echo Share created. Verify access as the intended user.
exit /b 0
フォルダ作成を契機に自動公開すると、未確認データまで共有する危険があります。対象フォルダの許可リスト、実行アカウント、ログ、失敗時の停止条件を設計してから自動化してください。
共有データのコピーとバックアップの違い
共有設定の管理とファイルのバックアップは別です。Robocopyで単純にミラーリングする/MIRは、コピー元にないコピー先のファイルを削除します。削除伝播のあるミラーを、世代管理されたバックアップと同じものとして扱わないでください。まず一覧のみの/Lで対象を確認します。
robocopy "\\MYPC\MyShare" "D:\Backup\Reports" /E /R:1 /W:1 /L
/L付きではコピーしません。対象とコピー先の既存データを確認してから/Lを外すとコピーしますが、/Eでも同名ファイルは更新され得ます。終了コード8以上は少なくとも1件の失敗を示し、0以外を全て失敗とする判定も不適切です。コピーのログと復元確認を行い、共有ACLの保存やNTFS権限の復元は別途計画します。
共有にアクセスできない場合の確認順
まず共有元でnet shareによる共有名・パス、次にクライアントのUNCパスと接続アカウント、最後に共有ACLとNTFS ACLを確認します。同名共有が既にあるエラーでは無断削除せず、現在の公開先を調べます。アクセス拒否では実行権限とアクセス対象を区別してください。
ネットワークや組織のSMBポリシーが原因のこともありますが、ファイアウォール全停止、インターネットへのSMB公開、ゲスト認証の有効化を一律の解決策にしません。管理者が承認済みネットワークと必要な通信だけ確認します。
参考資料
Microsoft:net share(旧版のコマンド資料)。実機の構文はnet help shareも確認してください。
Get-SmbShareAccess / Grant-SmbShareAccess / Revoke-SmbShareAccess / icacls / Robocopy


コメント