tech.guitarrapc.cóm

Technical updates

PowerShell で smb コマンドレットで 共有 フォルダを作成する

なんていうかですね、 SMB コマンドレットは本当に便利で Server管理には欠かせないのに 日本語圏では一切記事を見ないのが本当にアレです。 そもそも PowerShell 3.0以降の日本語記事をほとんど見ないのでいいといえばいいのですが、それでいいのですかねー? 簡単な導入編ですが、 SMB を使った 共有フォルダ設定についても触れておきます。 え? net share? あ、はい。2012年、2013年でもそういう記事ありますからねー ((

前提

SMB Share コマンドレットは、administartor権限を要します。 管理者権限で PowerShellを起動してくださいね!(要はUAC許可してね)

SMBShareコマンドレット

PowerShell 3.0は Windows Management Framework 3.0 = SMB 3.0 ベースです。 なので、 SMB 関連はほぼPowerShellで自動化可能です。 前回はリモートサーバーとの共有ドライブについてでしたが、 自身の特定のパスを共有フォルダとして公開するのも SMB系コマンドレットでできます。 そのために利用するのが、 SMBShare コマンドレットです。
Get-Command -Module SMBShare | where name -like "*SMBShare*"
これらです。
CommandType Name                   ModuleName
----------- ----                   ----------
Function    Block-SmbShareAccess   SmbShare
Function    Get-SmbShare           SmbShare
Function    Get-SmbShareAccess     SmbShare
Function    Grant-SmbShareAccess   SmbShare
Function    New-SmbShare           SmbShare
Function    Remove-SmbShare        SmbShare
Function    Revoke-SmbShareAccess  SmbShare
Function    Set-SmbShare           SmbShare
Function    Unblock-SmbShareAccess SmbShare
今回は、簡単に 共有フォルダを作るシーンを考えてみましょう。

共有フォルダを作成する

さっそく、自身のD:\Documentを hoge として共有してみます。
New-SmbShare –Name hoge –Path D:\Document\
testというユーザーにfull accessを与えたい?はい。
New-SmbShare –Name hoge –Path D:\Document\ -FullAccess test
これではtestしかアクセスできません。 他のユーザーにも与えるならどうぞ
New-SmbShare –Name hoge –Path D:\Document\ -FullAccess test,hogehoge@outlook.com
Readアクセスだけ与えるのも簡単ですね。
New-SmbShare –Name hoge –Path D:\Document\ -FullAccess test -ReadAccess hogehoge@outlook.com
まだ、net share とかいう人は.....いないと祈ります。

共有フォルダを取得する

当然 IPC領域から取得します。 いままでより格段に見やすいですね。
Get-SmbShare
Name   ScopeName Path        Description
----   --------- ----        -----------
ADMIN$ *         C:\Windows  Remote Admin
C$     *         C:\         Default share
D$     *         D:\         Default share
E$     *         E:\         Default share
F$     *         F:\         Default share
hoge   *         D:\Document
IPC$   *                     Remote IPC
R$     *         R:\         Default share
Users  *         C:\Users
正直、これだけれも垂涎モノなんですが。

共有フォルダを削除する

Name指定で出来るので簡単ですね。 SMBShareの削除 (Confirm付き)です。
Remove-SmbShare -Name hoge
SMBShareの削除 (Confirmぬき)は Forceを付けます。
Remove-SmbShare -Name hoge -Force

サンプルソース

さっくり纏めましたが、色々オプションもあります。 ぜひ試して感動してください。 https://github.com/guitarrapc/PowerShellUtil/blob/master/Set-ShareFolder/Set-ShareFolder.ps1