PowerShell で SMB 共有を管理できれば、特に複数のサーバーで管理する必要がある場合や、自動化したい場合には、まさに救世主と言えるでしょう。しかし、サーバー設定を微調整したり、新しい共有を即座に作成したりする場合、コマンドやオプションが多すぎて圧倒されてしまうことがあります。SMBShare モジュールは、共有の作成、アクセス管理、さらには開いているファイルのリアルタイム確認など、豊富な機能を備えているのが魅力です。ただし、これらのタスクの一部には管理者権限が必要なので、適切な権限がないと期待しすぎてしまう可能性があります。このチュートリアルでは、PowerShell から直接 SMB 共有を作成、管理、トラブルシューティングする方法をわかりやすく解説します。これにより、メニューを手動で操作する手間が省けます。
PowerShell を使用して Windows の SMB 共有の問題を修正する方法
PowerShell を使用して Windows で共有フォルダーを作成する
まず、共有の作成は右クリックほど簡単ではなくなっています。手早く設定したい場合は、PowerShellを使うのがおすすめです。既存の共有を確認するには、 を使用してくださいGet-SmbShare。デフォルトの管理者共有も含め、既に存在する共有が表示されます。
新しい共有を作成するコマンドは次のとおりです。
New-SmbShare -Name Scripts -Path C:\PS -FullAccess woshub\mun_admins, woshub\mun-man01$ -ChangeAccess "woshub\mun-man01_scripts_rw" -ReadAccess "$env:USERDOMAIN\domain users" –description "PowerShell scripts for admin"
詳しく説明すると、一部の管理者グループにフルアクセス、特定のマシンアカウントに変更権限、ドメインユーザーグループのメンバー全員に読み取り権限を付与することになります。SMB-EncryptData $Trueトラフィックの暗号化や-CachingModeオフラインアクセスなどのオプションを追加できることを覚えておいてください。一時的な共有の作成や接続制限の設定も便利な場合があります( や-Temporaryなど-ConcurrentUserLimit 50)。これらのオプションは、特に自動化や一時的なテストのために設定する場合など、より具体的なニーズに役立ちます。
共有フォルダの完全な設定を確認したい場合は、次のようにします。
Get-SmbShare -Name scripts | select *
後で共有を削除したい場合は、次の手順に従ってください。
Remove-SmbShare Scripts
ユーザー アクセスの追加も簡単です。
Grant-SmbShareAccess -Name Scripts -AccountName "woshub\b.hoffmann" -AccessRight Change -Force
または、誰かのアクセスを取り消すには:
Revoke-SmbShareAccess -Name Scripts -AccountName Everyone -Force
場合によっては、特定のアカウントのアクセスをブロックしたいことがあります (権限の拒否は他の権限よりも優先される傾向があります)。
Block-SmbShareAccess -Name Scripts -AccountName woshub\ExternalGuests -Force
SMB共有のロックアップの修正と開いているファイルの管理
ユーザーから「ファイルがロックされています」という報告があったり、特定のファイルにアクセスできなくなったりすると、状況が複雑になります。PowerShell を使えば、誰がファイルを開いているかを確認したり、必要に応じてファイルを閉じることさえできます。これは少々面倒ですが、時には必要なこともあります。
開いているファイルを確認するには:
Get-SmbOpenFile | select ClientUserName, ClientComputerName, Path, SessionID
特定のユーザーが開いているファイルを表示する場合は、次の方法が役立ちます。
Get-SmbOpenFile -ClientUserName "woshub\b.hoffmann" | select ClientComputerName, Path
そして、奇妙なのは、ファイルがハングしたりスタックしたりしたために強制的に閉じる必要がある場合、次の行が魔法の行だということです。
$sessn = New-CIMSession -ComputerName munfs01 Get-SMBOpenFile -CIMSession $sessn | where {$_. Path -like "*sale_report2022.docx*"} | Close-SMBOpenFile -CIMSession $sessn
理由はよく分かりませんが、最初の試行では失敗することもありますが、再起動や数回の再試行で解決することがあります。Windows は必要以上に難しくしているだけなのでしょう。
PowerShell でネットワーク ドライブをマッピングする
SMB共有をネットワークドライブにマッピングするのは、毎回手動で行うと面倒です。幸いなことに、PowerShellのNew-SmbMappingコマンドレットが面倒な作業を代行してくれます。共有\\munfs01\scriptsをドライブUにマッピングする方法は次のとおりです。
New-SmbMapping -LocalPath U: -RemotePath \\munfs01\scripts -UserName b.hoffmann -Password my22pass -Persistent $true -SaveCredential
注:がない場合-Persistent、再起動後にドライブは消えてしまいます。この-SaveCredentialオプションは、資格情報をWindows資格情報マネージャーに保存します。自動化は素晴らしいですね!マップされたすべてのドライブを表示するには、次のコマンドを実行してください。
Get-SmbMapping
物事がうまくいかなくなった場合、マッピング解除は次のようになります。
Remove-SmbMapping U: -Force
頑固な共有設定で行き詰まっている場合や、複数のユーザーマシンに永続的なドライブを設定する必要がある場合、GPOは依然として便利ですが、少数のサーバーを管理している場合や展開を自動化している場合は、PowerShellを使用する方が高速です。ただし、SMBの問題は巧妙に発生する可能性があるので覚えておいてください。開いているファイルのクリーンアップ、設定のリセット、あるいは不要になったSMB1などの古いプロトコルの無効化( を実行するだけSet-SmbServerConfiguration -EnableSMB1Protocol $false -Force)が重要な場合もあります。
まとめ
- 共有を作成することで、
New-SmbShare大量の時間を節約できます。 - 開いているファイルをチェックすると、何かがロックされたときにもサーバーをスムーズに実行し続けることができます。
- 権限に注意し、使用し
Grant-SmbShareAccessてRevoke-SmbShareAccessアクセスを整理します。 - ドライブのマッピングは
New-SmbMapping完全に自動化できるため、展開スクリプトに最適です。
まとめ
PowerShellは、SMB共有の管理、ファイルロックの問題の修正、ネットワーク共有の自動化といった非常に強力な手段を提供します。完璧ではありません。コマンドが失敗したり、再試行が必要になったりすることもあります。しかし、全体的には手作業を大幅に削減できます。必要な場合はシェルを管理者として実行し、権限を再確認したり、動作がおかしい場合はファイルハンドルを開いたりすることを忘れないでください。この情報が、SMB関連の問題を頭を悩ませることなく解決するための良い出発点となることを願っています。誰かの役に立つことを願っています。私の場合はうまくいきましたので、あなたにも役立つかもしれません。