Search

2017/04/30

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


2017/04/20

音楽を聴く時だけにWindowsのスリープを無効にする:Don'tSleepとかPowercfg

省電力設定なので、10分でディスプレイの電源が切れる。
そうすると音楽も止まる。
それで、音楽を聴く時だけにWindowsのスリープを無効にしたい!

■フリーソフトDon'tSleepを使う
■コマンドラインのバッチファイルで切替え

■フリーソフトDon'tSleepを使う

フリーソフトだとDon'tSleepがいいらしいので使ってみた。
手軽で高機能。実行ファイルのみなので使いやすい。

Don't Sleep is a small portable program to prevent system shutdown, Standby, Hibernate, Turn Off and Restart. 


窓の杜のレビュー
指定した時刻までシャットダウンや節電機能を一時的に抑制できる「Don't Sleep」
http://forest.watch.impress.co.jp/docs/review/362345.html



■コマンドラインのバッチファイルで切替え

コマンドラインから電源OFFまでの時間を変更することもできる。
これのbatファイルを作ってデスクトップに置いとけば簡単。
下記の2個のファイルでOFFまでの時間を入れ替え。
もしくは、powershellで時間を取得して分岐するのが良いかも。
フリーソフトのインストールNGの環境ならこの方法もいいかも。

5時間、300分でディスプレイOFF
powercfg /x monitor-timeout-ac 300

10分でディスプレイOFF
powercfg /x monitor-timeout-ac 10





情報元
5 Tools to Prevent Windows From Sleeping or Turning Off the Display
https://www.raymond.cc/blog/dont-sleep-prevent-windows-from-standby-shutdown-hibernate-and-restart/

マイナビニュース
【ハウツー】レッツ! Windows 7 - 電源管理編(3)
http://news.mynavi.jp/articles/2009/10/18/w7/001.html

2017/04/08

Excel無しのWindowsでxlsxファイルを読んだり変更したり:PowerShellとClosedXML

PowerShellができれば何でもできるっぽい。DLLさえよみこめば。
ClosedXMLみたいなExcelの操作ができるDLLを読めばxlsxが読める。
やってみた。簡単だった。
リンク解除につまずいただけ。
やっぱりシェルが使えるのは便利すぎる。


------
今のところ、0.86.0にClosedXML.dllありました。
ClosedXML.0.86.0.zip
https://github.com/ClosedXML/ClosedXML/releases


ClosedXMLのドキュメントとDocumentFormat.OpenXml.dll
https://github.com/ClosedXML/ClosedXML/wiki
DocumentFormat.OpenXml.dllは、本家Open XML SDKのがいいかも。


かんたんな手順!
手順1)同じフォルダにdllを置く ※c:\tmpを想定
ClosedXML.dll
DocumentFormat.OpenXml.dll
test.xlsx

手順2)dllのブロックを解除する


手順3)下記コードをPowerShellで実行

[Reflection.Assembly]::LoadFile("C:\tmp\DocumentFormat.OpenXml.dll") [Reflection.Assembly]::LoadFile("C:\tmp\ClosedXML.dll") 
$wb = New-Object ClosedXML.Excel.XLWorkbook("c:\tmp\test.xlsx"); 
$ws =$wb.Worksheet(1); 
for($i=1; $i-lt 20; $i++){ $ws.cell(11,$i).Value = 100+$i; }
for($i=1; $i-lt 20; $i++){ $ws.cell($i,11).Value = 1000+$i; } 
$wb.SaveAs("c:\tmp\test.xlsx");


あとはいろいろと改変しよう!
新規ブック作りたいときは、3-4行を下記に差し替え。

$wb = New-Object ClosedXML.Excel.XLWorkbook; 
$ws =$wb.Worksheets.Add("SheetOne"); 





参照サイト

【PowershellでClosedXMLについて】
miyamiya様
PowerShell で ClosedXML を使って Excel ファイルを作成する
http://qiita.com/miyamiya/items/fd93d633afa0314f231a

愛しく切ない1bed miyamiya様
PowerShell で ClosedXML を使って Excel ファイルを作成する
http://1bed.saloon.jp/?p=2206


【リンク解除について】
himorogiの日記
PowerShell から .NetFramework 版 SQLite を使う
http://d.hatena.ne.jp/himorogi/20141105/1415217173


【DLLのロードについて】
guitarrapc_tech様
PowerShell の Add-Type と [Reflection.Assembly]
http://tech.guitarrapc.com/entry/2014/03/17/042253

[]