検索
連載

【 Block-SmbShareAccess 】コマンドレット――共有フォルダへのアクセスを拒否するWindows PowerShell基本Tips(69)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Block-SmbShareAccess」コマンドレットを解説します。

Share
Tweet
LINE
Hatena
「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、共有フォルダへのアクセスを拒否する「Block-SmbShareAccess」コマンドレットです。

Block-SmbShareAccessコマンドレットとは?

 Windows環境におけるアクセス権は、基本的に「ユーザー」とユーザーをまとめた「グループ」の2つで制御します。

 ある共有フォルダにアクセス権を与える場合、「ITグループに属しているユーザーは基本的にアクセス可能としたいが、特定のユーザーだけは除外したい」というシナリオが考えられます。

 このシナリオでは、グループを新規作成するという方法もありますが、都度グループを作成していてはグループが増え過ぎて管理面で収拾がつかなくなる恐れもあります。そこで「特定のユーザーのアクセスを拒否する」という設定が、できればこの要件を満たせます。

 Block-SmbShareAccessは、設定済み共有フォルダに対し「拒否」のアクセス権を付与するコマンドレットです。前述のようなシナリオで「特定のユーザー(もしくはグループ)のアクセスを拒否する」場合に用います。

 現在設定されているアクセス権に関しては、本連載第64回の記事中に紹介した「Get-SmbShareAccess」コマンドレットで取得可能です。

 なお、アクセス拒否は非常に厳しい設定となります。GUIの管理ツールで拒否のアクセス権を付与した場合は以下のようなメッセージが表示され、「許可」と「拒否」の両方が設定されていた場合には「拒否が優先される」と記載されています(画面1)。

画面1
画面1 GUIで拒否の共有アクセス権を設定した際に表示される警告メッセージ

 「拒否」は全てにおいて優先される共有アクセス権であるため、十分に検討した上で設定してください。

Block-SmbShareAccessコマンドレットの書式

Block-SmbShareAccess [オプション]


Block-SmbShareAccessコマンドレットの主なオプション

オプション 意味
-Name 拒否の共有アクセス権を追加したい共有フォルダの共有名を指定する。必須
-AccountName 拒否の共有アクセス権を追加したいユーザー名/グループ名を指定する。必須
-Force 実行時に確認なしで処理したい場合に指定する。省略可能


拒否の共有アクセス権を追加する

 拒否の共有アクセス権を追加する場合は、共有フォルダの「共有名」と拒否したい「ユーザー名」または「グループ名」を指定してBlock-SmbShareAccessコマンドレットを実行します(画面2)。なお、Block-SmbShareAccessコマンドレットは、管理者権限で実行する必要があります。

コマンドレット実行例

Block-SmbShareAccess -Name "IT_Folder" -AccountName "woods"

画面2
画面2 共有名「IT_Folder」の共有フォルダに対して、ユーザー「woods」のアクセス拒否を設定した

 Block-SmbShareAccessコマンドレットによって、AccessControlTypeが「Deny(拒否)」に設定されたことが分かります。

 事前に「Get-LocalGroupMember」コマンドレットで、ローカルグループ「IT Group」にユーザー「woods」が含まれていることを確認しています。Block-SmbShareAccessコマンドレット実行前は、フルコントロール権限で共有フォルダにアクセスできていました。しかし、Block-SmbShareAccessコマンドレットで拒否の共有アクセス権を付与したため、全てに優先してアクセスが拒否されます。

 なお、Block-SmbShareAccessコマンドレットは実行時に確認プロンプトが表示されるので、[y]キーで応答しています。これはスクリプトによる自動化の阻害要因になりますので、確認なしで処理を進める「-Force」オプションが用意されています(画面3

コマンドレット実行例

Block-SmbShareAccess -Name "IT_Folder" -AccountName "woods" -Force

画面3
画面3 コマンドレット実行時に「-Force」オプションを指定して実行すると、確認プロンプトは表示されない

 「-AccountName」オプションに関しては本連載第67回でも解説した通り、コンピュータがドメイン参加している場合には、ドメインアカウントの場合は「ドメイン名¥アカウント名」、ローカルアカウントの場合は「サーバ名¥アカウント名」を明示的に指定する必要があります。



複数のユーザーに拒否の共有アクセス権を追加する

 複数のユーザーに拒否の共有アクセス権を追加したい場合は、「-AccountName」オプションにユーザーアカウントを複数指定することで一括で拒否を設定することが可能です(画面4)。

コマンドレット実行例

Block-SmbShareAccess -Name "IT_Folder" -AccountName "stenson","simpson" -Force

画面4
画面4 「-AccountName」オプションに複数のユーザーアカウントを設定し、拒否の共有アクセス権を追加した。GUIで確認すると内容がずれている

 画面4のように、既に許可の共有アクセス権が設定されていても、拒否のアクセス権が追加されます。

 この場合、「拒否優先の原則」に従って共有フォルダへのアクセスは拒否されますが、GUIで確認すると拒否の共有アクセス権のみが表示されています。従って、可読性を向上させるためには許可の共有アクセス権を削除しておいた方がよいでしょう。

筆者紹介

後藤 諭史(ごとう さとし)

Microsoft MVP for Cloud and Datacenter Management(2012-2023)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る