カピバラ好きなエンジニアブログ

ITのこととか趣味のカメラのことなどを赴くままに書いていきます。カピバラの可愛さこそ至高。

PowerShellを使用してコマンドラインで共有設定してみた

経緯

前回CloudBerry Driveでマウントしたフォルダを共有するまでやりましたが、その方法だと再起動時に共有設定がクリアされてしまう問題がありました。
記事の最後にPowerShellなどでバッチ化したらできるのでは??みたいなことを書いたので、PowerShellのコマンドで共有設定が可能か試してみます。

↓前回記事↓
capybara-engineer.hatenablog.com


実施内容

  • 事前確認
  • PowerShellでNew-SmbShareコマンド実行、結果確認

実施作業

事前確認

まずはマウント設定とマウント先を確認します。
f:id:live-your-life-dd18:20191118133505p:plain

前回記事を作成したあとに再起動をかけているので、共有設定は外されています。
f:id:live-your-life-dd18:20191118133545p:plain

使用するPowerShellのバージョンはこちら
f:id:live-your-life-dd18:20191118134216p:plain

New-SmbShareコマンドヘルプ

名前
    New-SmbShare

概要
    Creates an SMB share.

構文
    New-SmbShare [-Name] <String> [-Path] <String> [[-ScopeName] <String>] [-CachingMode {None | Manual | Documents | P
    rograms | BranchCache | Unknown}] [-CATimeout <UInt32>] [-ChangeAccess <String[]>] [-CimSession <CimSession[]>] [-C
    oncurrentUserLimit <UInt32>] [-ContinuouslyAvailable <Boolean>] [-Description <String>] [-EncryptData <Boolean>] [-
    FolderEnumerationMode {AccessBased | Unrestricted}] [-FullAccess <String[]>] [-NoAccess <String[]>] [-ReadAccess <S
    tring[]>] [-SecurityDescriptor <System.String>] [-Temporary] [-ThrottleLimit <Int32>] [-Confirm] [-WhatIf] [<Common
    Parameters>]

説明
    The New-SmbShare cmdlet exposes a file system folder to remote clients as a Server Message Block (SMB) share.
    To delete a share that was created by this cmdlet, use the Remove-SmbShare cmdlet.

関連するリンク
    Get-SmbShare
    Remove-SmbShare
    Set-SmbShare

注釈
    例を参照するには、次のように入力してください: "get-help New-SmbShare -examples".
    詳細を参照するには、次のように入力してください: "get-help New-SmbShare -detailed".
    技術情報を参照するには、次のように入力してください: "get-help New-SmbShare -full".
    オンライン ヘルプを参照するには、次のように入力してください: "get-help New-SmbShare -online"


今回使用するパラメータ

パラメータ 説明
-Name 80文字未満でSMB共有の名前を設定
-Path 共有するフォルダのフルパスを指定
-ErrorAction コマンドレットがエラーだった場合の処理内容を指定
-ReadAccess 共有するフォルダへの読み取り権限を設定するユーザ・グループを指定
-ChangeAccess 共有するフォルダへの書き込み権限を設定するユーザ・グループを指定
-FullAccess 共有するフォルダへのフルアクセス権限を設定するユーザ・グループを指定


今回実行するコマンド

New-SmbShare -Name "test1" -Path "D:\test1" -ErrorAction Stop -ReadAccess "TestGroup1" -ChangeAccess "TestGroup2" -FullAccess "TestGroup3"



PowerShellでNew-SmbShareコマンド実行、結果確認

それでは実際に実行してみます。
f:id:live-your-life-dd18:20191118141534p:plain

フォルダを確認すると共有設定がされていることが確認できました。
f:id:live-your-life-dd18:20191118141617p:plain

権限回りも想定通り設定されていました。
f:id:live-your-life-dd18:20191118141648p:plain f:id:live-your-life-dd18:20191118141729p:plain f:id:live-your-life-dd18:20191118141750p:plain

同じ共有名で実行するとエラーとなるため、設定する場合は共有単位で名前を変えるか、一度Remove-SmbShareで削除して再度共有設定する必要があります。
f:id:live-your-life-dd18:20191118143109p:plain


ちなみに、存在しないユーザ・グループを指定すると、『アカウント名とセキュリティ ID の間のマッピングは実行されませんでした。』とエラー出力されます。
f:id:live-your-life-dd18:20191118142009p:plain


これは今回調べて知ったのですが、Windows NT系のOSはユーザやアカウント等を管理する際、内部で使用する数値SIDを使って管理しており、同じ名前のユーザであっても同じSIDは使われていません。
上記のエラーは、指定したユーザ・グループに紐づくSIDが解決できないことで発生したエラーでした。
それが中々理解できずにちょっとハマってました。。
※ざっくりとしか理解していないので、間違ってるかもしれませんが
f:id:live-your-life-dd18:20191118142413p:plain


感想及び所感

バッチを作成するところまではできませんでしたが、自分が知りたいところは解決できたのでよかったです。
バッチ化は時間があればやります。。