Powershellでフォルダ容量を表示:DUみたいな

基本はこんな感じでファイル容量の合計だと思う。
でも何かと面倒
(Get-ChildItem "c:\folder" -Recurse -Force | Measure-Object -Sum Length).Sum

du.exeを使った方が簡単だと思う。
Disk Usage
https://technet.microsoft.com/ja-jp/sysinternals/du.aspx
で、定期的に起動してログを残しとく感じで、



----------------------
#The software is public domain software.
#You can use it for any purpose.

$root = "c:\" #チェックするフォルダの指定
$folder_ex =@("\windows" ,"\program") #除外するフォルダ名

$folderList = (Get-ChildItem $root | Where-Object PSisContainer)


$Res = ""
  foreach($i in $folderList ){

  #除外リストに入っているかチェック(でも条件ゆるすぎ)
  $folderName = $i.FullName -replace "\\", "_"
  $flgExFolder = $true

  foreach($ex_word in $folder_ex){
    if( $folderName -notmatch $ex_word){
      $flgExFolder = $false
      break
    }
  }

  if( $flgExFolder ){
    Write-Host $i.FullName #確認のためコンソール出力
    #指定フォルダの2階層までチェック
    $Res += c:\files\du\du64.exe -l 2 -c -q -nobanner $i.FullName
    $Res += "`r`n"
  }

}



#CSVファイルを読みやすいように調整
$Res = $res.Replace( ("""" + $root) , ("`n" + """" + $root) )

#日付とMACアドレスとかも書いておく
$Res += (Get-Date -Format "yyyy-MM-dd HH:mm:ss") +"`r`n"$Res += (getmac) +"`r`n"
$Res += (hostname) +"`r`n"

#utf8でファイル出力
$Res | Out-File "c:\files\ducheck\dutest.txt" -Encoding utf8
----------------------



このps1を実行しよとしてもポリシー違反で実行できない。
また、ウィンドウを開くのもヤダ。
diskuse.vbsを作って、ポリシー解除とウィンドウを表示しない。
diskuse.vbsを定期的に実行するようにしておく。

----------------------
CreateObject("WScript.Shell").Run "powershell -NoProfile
-ExecutionPolicy Unrestricted c:\diskuse\diskuse.ps1", 0
CreateObject("WScript.Shell").Run "powershell c:\diskuse\diskuse.ps1", 0
----------------------

Public domainでAS-ISな感じです。

結果をGmailにSend-MailMessageしようとしたがうまくいかず。
SMTP.gmail.comだと安全性の低いアプリの許可が必要。
aspmx.l.google.comだと接続エラー。
ほかのSMTPサーバーを使えばうまくいくだろうと思う。


参考
Powershellコマンド集
http://qiita.com/ShotaKameyama/items/1d3784183f1b00ce98e5


コメント