teratail header banner
teratail header banner
質問するログイン新規登録
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

1713閲覧

PowerShellでフォルダの中身ひとつ下の「フォルダ名」が知りたい

moitaro

総合スコア443

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2018/02/23 02:47

0

0

お世話になっております。

PowerShellまだまだ初心者のため質問失礼します。

件名のように
PowerShellでフォルダの中身ひとつ下の「フォルダ名:サイズ」が知りたい
と思っております。

https://teratail.com/questions/114599
より

# 管理共有を除いた共有フォルダの列挙 Get-SmbShare -Special:$false | ForEach-Object {

で管理共有を除いた共有フォルダの列挙はわかったのですが
共有フォルダのひとつ下の列挙という命令は無いと思われるので
その列挙の指定方法をお教え頂けないでしょうか?

初心者の質問で大変申し訳ございませんが
上記お問い合わせいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。
Get-SmbShareで共有フォルダのパスは取得できますので、それに対してGet-ChildItemを実行すればサブフォルダを取得できます。

例)

powershell

1Get-SmbShare -Special:$false | ForEach-Object { 2 # 共有フォルダのパスは Path プロパティで取れる 3 Write-Output ("共有フォルダ : {0}" -f $_.Path) 4 5 # Get-ChildItem を使ってサブフォルダの取得する 6 $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory 7 foreach ($folder in $subFolders) { 8 # それぞれのサブフォルダ名の列挙 9 # ちなみにフルパスは FullName プロパティで取得できる 10 Write-Output ("サブフォルダ : {0}" -f $folder.Name) 11 } 12}

コメント欄のやり取りを反映して新しい例を追加しています。

例2) Test-Pathを追記

powershell

1Get-SmbShare -Special:$false | ForEach-Object { 2 # 共有フォルダのパスは Path プロパティ 3 Write-Output ("共有フォルダ : {0}" -f $_.Path) 4 5 # Get-ChildItem のまえにパスのチェックを実施 6 if (Test-Path -LiteralPath $_.Path -PathType Container) { 7 # Get-ChildItemを使ってサブフォルダの取得 8 $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory 9 foreach ($folder in $subFolders) { 10 Write-Output ("サブフォルダ : {0}" -f $folder.Name) 11 } 12 } 13}

投稿2018/02/23 03:50

編集2018/02/23 07:47
stknohg

総合スコア796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2018/02/23 05:19

本当にありがとうございます。m(_ _)m ですが上記ではサブフォルダが無い(共有プリンタドライバ等)所で ``` Get-ChildItem : パス 'C:\temp\TOSHIBA e-STUDIO4520C PCL6 V4,LocalsplOnly' が存在しないため検出できません。 発生場所 C:\temp\thanks_stknohg.ps1:95 文字:19 + $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory + ``` と出てしまうためどのように改良すれば良いのか伺ってよろしいでしょうか? もう本当に申し訳ないのですが上記お問い合わせいたします。
stknohg

2018/02/23 05:47

手元でそれを再現できる環境がないので、机上での説明のみになりますが、Get-ChildItemするまえに Test-Path コマンドを使って実際に存在するかチェックしてやると良いと思います。
moitaro

2018/02/23 06:48

stknohg様 本当にコメントありがとうございます。 下記のように if (Test-Path Get-ChildItem) { とやってみたのですが全てfalseとなるようなので 調査方法をご助力頂けないでしょうか? PowerShellのマニュアル購入しなければならないのでしょうか? ``` Get-SmbShare -Special:$false | ForEach-Object { # 共有フォルダのパスは Path プロパティで取れる Write-Output ("共有フォルダ : {0}" -f $_.Path) if (Test-Path $f) { #Get-ChildItemするまえに Test-Path コマンドであるかチェック※コレじゃ駄目っぽい…… if (Test-Path Get-ChildItem) { # Get-ChildItem を使ってサブフォルダの取得する $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory foreach ($folder in $subFolders) { # それぞれのサブフォルダ名の列挙 # ちなみにフルパスは FullName プロパティで取得できる Write-Output ("サブフォルダ : {0}" -f $folder.Name) } } } } ``` 本当にお忙しいところ大変申し訳無いのですが 上記お問い合わせいたします。
stknohg

2018/02/23 07:49

エラーの内容を見る限り、特定の共有フォルダは存在しないディレクトリを指している様なので、そのパスに対してTest-Pathをしてやります。 そのため、 Test-Path Get-ChildItem ではなく、Test-Path -LiteralPath $_.Path の様にしてください。 回答欄に例2)を追加しておきましたのでそちらもご確認ください。
moitaro

2018/02/23 08:28

stknohg様 本当にありがとうございます。 各サブディレクトリのフォルダサイズが欲しいため ``` Get-SmbShare -Special:$false | ForEach-Object { # 共有フォルダのパスは Path プロパティ Write-Output ("共有フォルダ : {0}" -f $_.Path) # Get-ChildItem のまえにパスのチェックを実施 if (Test-Path -LiteralPath $_.Path -PathType Container) { # Get-ChildItemを使ってサブフォルダの取得 $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory foreach ($folder in $subFolders) { Write-Output ("サブフォルダ : {0}" -f $folder.Name) #フォルダサイズの取得 頑張るっ # フォルダサイズの取得は気合いで頑張るしかない $folderSize = Get-DirectoryVolume -Path $_.Path -Recurse -Scale MB | Measure-Object -Sum MB | Select-Object -ExpandProperty Sum # 結果を出力 Write-Output ("{0}({1}) : {2}MB" -f $_.Name, $_.Path, $folderSize) } } } ``` とやったのですが サブフォルダのサイズが全て同じになってしまいます…… ここまでお教えいただいたので出来れば自力でやりたいのですが 初心者ゆえ原因が不明ですのでお教えいただきますと幸いです。 以上 ご連絡いたします。
stknohg

2018/02/23 08:47

$folderSize = Get-DirectoryVolume -Path $_.Path の部分で `$_.Path` は共有フォルダのパスです。 $folderSize = Get-DirectoryVolume -Path $folder.FullName の様に $folder.FullName を指定する必要があります。
moitaro

2018/02/23 09:01

本当に度々ありがとうございます。 ``` Get-SmbShare -Special:$false | ForEach-Object { # 共有フォルダのパスは Path プロパティ Write-Output ("共有フォルダ : {0}" -f $_.Path) # Get-ChildItem のまえにパスのチェックを実施 if (Test-Path -LiteralPath $_.Path -PathType Container) { # Get-ChildItemを使ってサブフォルダの取得 $subFolders = Get-ChildItem -LiteralPath $_.Path -Directory foreach ($folder in $subFolders) { Write-Output ("サブフォルダ : {0}" -f $folder.Name) #フォルダサイズの取得 頑張るっ # フォルダサイズの取得は気合いで頑張るしかない #$folderSize = Get-DirectoryVolume -Path $_.Path -Recurse -Scale MB | Measure-Object -Sum MB | Select-Object -ExpandProperty Sum #↓ってやってねっとstknohgさんから連絡 $folderSize = Get-DirectoryVolume -Path $folder.FullName # 結果を出力 Write-Output ("{0}({1}) : {2}MB" -f $_.Name, $_.Path, $folderSize) } } } ``` のようにやるのかと思ったのですが 最初の共有フォルダしかサイズが表示されないのでで落ち着いて考えます。 本当にありがとうございました。
stknohg

2018/02/23 09:08

それでよいのですが、先ほどの指摘では後ろの部分を省略していました。 実際には $folderSize = Get-DirectoryVolume -Path $folder.FullName -Recurse -Scale MB | Measure-Object -Sum MB | Select-Object -ExpandProperty Sum の様にしてください。
moitaro

2018/02/27 02:35

ありがとうございます。 ``` ForEach-Object : 引数が null であるため、パラメーター 'Path' にバインドできません。 発生場所 C:\temp\teratail3.ps1:79 文字:32 + Get-SmbShare -Special:$false | ForEach-Object { + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [ForEach-Object]、ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ForEachObje ctCommand ``` とエラーメッセージが出るためもう少し調査しますっ
stknohg

2018/02/27 03:53

エラー自体は -Path 引数に $null が来ているために発生していますね。 ただ、この場合常に存在しているフォルダを相手にしているはずなのに $null になってしまう理由はわかりません。 せめてどのフォルダでエラーになっているのか分かれば他に言えることがあるかもです。
moitaro

2018/02/27 05:52

ご返答ありがとうございます。 おっしゃる通り自分でもう少し調査してみます。 この度は誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問