※当サイトの記事には、広告・プロモーションが含まれます。

PowerShellで共有フォルダ作るのって、かなり制限あるやん...

f:id:ts0818:20200611180837j:plain

パワー・トゥ・ザ・ピープル英語Power to the People)は、1971年に発表されたジョン・レノン楽曲

パワー・トゥ・ザ・ピープル - Wikipedia

革命をテーマにした非常にシンプルな曲。労働環境の改善を求めるのならば、それを実際に行動に移せという強いメッセージが込められている。武力革命に関しては、肯定的でもあり否定的でもあったが、この曲の中ではそこまでは言及していない。

パワー・トゥ・ザ・ピープル - Wikipedia

⇧ だそうな。

⇧ 出た~、まぁ、現実は「長い物には巻かれろ」でいくしかないんですな...

フジロック・フェスティバルではメインステージの全アクト終了後に毎年流される。

パワー・トゥ・ザ・ピープル - Wikipedia

⇧ そんな「フジロック・フェスティバル」ですが、

www.fashionsnap.com

⇧ ですと。

いや、人間、誰だってミスはするから仕方ないとは思うけど、無かったことにするのは駄目でしょう、完全に隠蔽しようとしにいってるとしか思えない風に見えちゃってるのがイメージダウンにつながるものね。

音楽のPowerは偉大とは思いますが、今回は、PowerShellについてレッツトライ~。

 

PowerShellで共有ファルダが作成できん...

なんか、PowerShellで共有フォルダを作成しようとして、上手くいかんのよね。

# 共有フォルダの配置先
$nw_path = "\\TOSHINOBU-PC\Users\Toshinobu\Desktop\soft_work\vm01_share"
# 作成したい共有フォルダ
$target_dir_arr = @("Japan", "America", "China", "Russian", "United Kingdom")

# 共有フォルダの数だけループ
foreach ($target_dir in $target_dir_arr) {
  # 共有フォルダのパスを作成
  $shared_folder_path = Join-Path $nw_path $target_dir
  # 共有フォルダのパスが存在しない場合
  if (!(Test-Path $shared_folder_path)) {
    # 共有フォルダ用のディレクトリを作成
    New-Item $shared_folder_path -ItemType Directory
  }
  # 共有フォルダ用のディレクトリを元に共有フォルダを作成
  New-SmbShare -Name shared -Path $shared_folder_path -FullAccess Everyone
  # 変数の中身を空にする
  Clear-Item $shared_folder_path
}

⇧ ってやってみたところ、

f:id:ts0818:20200610220639p:plain

むっちゃエラー出るやん...

一応、ディレクトリ自体は作成されてはいる。

f:id:ts0818:20200610231149p:plain



どうやら、「共有フォルダ」としての作成ができんのですと、何で?

teratail.com

New-SmbShareコマンドレットはあくまでも共有フォルダを作るサーバーの内部で実行するものです。  
-Pathパラメーターにはローカルパスを指定しなければなりません。

PowerShell - PowerShell 共有フォルダの作成|teratail

⇧ はい~。

つまり、

$SharedFolderPath = '\\192.168.2.xx\d$\test\01'

PowerShell - PowerShell 共有フォルダの作成|teratail

⇧ みたいな「ネットワークパス」は指定できないんですって。

このため、外部のサーバーから共有フォルダを作りたい場合はInvoke-Commandを使ってリモートでコマンドを実行してやります。

ざっくり以下の様な感じで作成できるはずです。

$cred = Get-Credential # 対象サーバーへ接続するための認証情報
Invoke-Command -ComputerName "対象サーバー" -Credential $cred -ScriptBlock {
    # このスクリプトブロックは対象サーバーで実行される
    New-SmbShare -Name "共有フォルダ名$" -Path 'C:\SharedFolder' -FullAccess "everyone"
}

PowerShell - PowerShell 共有フォルダの作成|teratail

⇧ ってあるけど、どっちにしろ、「ネットワークパス」は指定できないというね...

まじか...PowerShell まったく使えねぇじゃん...

だって、移行先の環境の「ローカルパス」が分からない場合、と言うか、環境によっては、「ネットワークパス」しか連携されない場合だってあると思うしね。

 

妥協するしかないよね...

まぁ、できないものは仕方ない、と言うことで、

# 共有フォルダの配置先
#$nw_path = "\\TOSHINOBU-PC\Users\Toshinobu\Desktop\soft_work\vm01_share"
$nw_path = 'C:\Users\Toshinobu\Desktop\soft_work\vm01_share'
# 作成したい共有フォルダ
$target_dir_arr = @("Japan", "America", "China", "Russian", "United Kingdom")

# 共有フォルダの数だけループ
foreach ($target_dir in $target_dir_arr) {
  # 共有フォルダのパスを作成
  $shared_folder_path = Join-Path $nw_path $target_dir
  # 共有フォルダのパスが存在しない場合(つまり、ディレクトリが存在しない場合)
  if (!(Test-Path $shared_folder_path)) {
    # 共有フォルダ用のディレクトリを作成
    New-Item $shared_folder_path -ItemType Directory
  }
  # 共有フォルダ用のディレクトリを元に共有フォルダを作成
  if (!(Get-SmbShare -Name $target_dir)) {
    New-SmbShare -Name $target_dir -Path $shared_folder_path -FullAccess Everyone
  }
  # 変数の中身を空にする
  Clear-Item Variable:shared_folder_path
}

echo "正常に処理が完了"

⇧ 修正しました。

f:id:ts0818:20200610233400p:plain

 

つまり、移行先にsshログインとかできないような環境では、移行先のGUI上の管理画面とかから、「共有フォルダ」をポチポチ手動で作成しておくしか無さそうね...

共有フォルダ100個とかあったら、それ1個1個、GUI上で作成って...地獄ですな...

というわけで、

news.mynavi.jp

PowerShellの開発者が、PowerShellの使用を勧めている理由が全くもって理解できないのであった。

まぁ、UNC(Uniform Naming Convention)の問題がPowerShellだと起きないってのは良いことだけどね。

f:id:ts0818:20200612201420p:plain

f:id:ts0818:20200612201818p:plain
コマンドプロンプトだとデフォルトの状態だと怒られるしね。

 

今回はこのへんで。