treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

PowershellでもうちょっとSMBの状態を詳しく見る

自分の頭の中を整理するために、SMBについて分かったことを書いておこう、という趣旨の記事。それって備忘録…?

PowerShellコマンドレットGet-SmbConnectionのご報告です。

SMBバージョンあれこれ

SMBバージョンはOSによって使えるバージョンが決まっていて、上位バージョンを有するクライアントでは、完全な下位互換があると考えてよさそうです。
なのでお互いに確認しあって両方が使える一番上位のバージョンを使うような動きを取ります。
Windows XPやWindows Server2003より前のOSだと、「SMB1.0(NTLM 0.12)」が使われ、
OSがWindows VistaやWindows Server2008では、「SMB2.0(Dialectが2.0.2)」が使われ、
OSがWindows 7やWindows Server2008 R2では、「SMB2.1(Dialectが2.1.0)」が使われ、
OSがWindows 8やWindows Server2012では、「SMB3.0(Dialectが3.0.0)」が使われ、
OSがWindows 8.1やWindows Server2012 R2では、「SMB3.0.2(Dialectが3.0.2)」が使われ、
OSがWindows 10やWindows Server2016では「SMB3.1.1(Dialectが3.1.1)」が使われます。

つまり、Windows10同士でSMB通信が開始した場合、お互いにSMB3.1.1が利用可能なので、すんなりSMB最新バージョンで通信を開始しますし、Windows10からWindows Server 2008 R2に接続すると、Windows Server2008 R2のSMB2.1にWindows10が合わせてくれる、といった動きになります。

このSMBバージョンを一通り頭に入れて、これ以降のダイアレクトの話を。

Get-SmbConnectionで一覧表示

PowerShellのコマンドレット「Get-SmbConnection」を使うと、現在操作しているデスクトップ上で接続しているSMB通信で接続している共有資源はSMBのバージョン幾つで接続がされているかを確認することができます。
※前回から抜粋。
-------------------------------------------------------
PS C:\Windows\system32> Get-SmbConnection

ServerName ShareName UserName Credential Dialect NumOpens
---------- --------- ---------------- --------------- ------- --------
smbfs Folder-a CompName\Usernm01 CompName\Usernm01 3.0 2
WinSVR-TR1 Folder01 CompName\Usernm01 CompName\Usernm01 3.0.2 3
WinSVR-TR1 IPC$ CompName\Usernm01 CompName\Usernm01 3.0.2 0
FileSVR Folder01 CompName\Usernm01 DomainNM\Usernm01 2.0.2 2
NASNE share2 CompName\Usernm01 CompName\Usernm01 1.5 1
NAS-3 Folder01 CompName\Usernm01 CompName\Usernm01 1.5 0
-------------------------------------------------------
Windows10からSMB接続の一覧。
sambaバージョン4のファイルサーバsmbfsではダイアレクトが3.0、Windows Server 2012 R2で共有しているファイルサーバWinSVR-TR1の共有フォルダへの接続はよりバージョンが高い3.0.2が使われていることが分かります。
同じsambaサーバでもバージョンが古いFileSVRというサーバではダイアレクト2.0.2が使われていますし、NASNEやTeraStationであるNAS-3ではダイアレクト1.5での接続になっています。

Get-SmbConnectionでさらに深堀り

各々の接続について詳細を見るためには、
Get-SmbConnectionコマンドレットに「-ServerName %サーバ名% | Select-Object -Property *」を付けて実行します。
-------------------------------------------------------
PS C:\Windows\system32> Get-SmbConnection -ServerName FileSVR | Select-Object -Property *

SmbInstance : Default
ContinuouslyAvailable : False
Credential : DomainNM\Usernm01
Dialect : 2.0.2
Encrypted : False
NumOpens : 3
Redirected : False
ServerName : FileSVR
ShareName : Folder01
Signed : False
UserName : CompName\Usernm01
PSComputerName :
CimClass : ROOT/Microsoft/Windows/SMB:MSFT_SmbConnection
CimInstanceProperties : {ContinuouslyAvailable, Credential, Dialect, Encrypted...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties

-------------------------------------------------------

表記には「Encrypted」SMB暗号化の有無や「Redirected」(たぶんSMBリダイレクト)の可否などが表記されています。接続について詳しい情報を閲覧することができるコマンドですね。