2016年4月27日水曜日

◆長いファイル名を扱う

http://powershell.com/cs/blogs/tips/archive/2016/04/14/dealing-with-long-file-names.aspx

フォルダー階層が深くなりすぎるとファイルの参照が出来なかったりする。

PSAlphaFSというモジュールを使うと長いパスに対応したコマンドレットを提供してくれるそうな。

PS> Install-Module -Name PSAlphaFS -Scope CurrentUser

PS> Get-Command -Module PSAlphaFS | Select-Object Name, Version

Name              Version
----              -------
Copy-LongItem     1.0.0.0
Get-LongChildItem 1.0.0.0
Get-LongItem      1.0.0.0
Move-LongItem     1.0.0.0
New-LongItem      1.0.0.0
Remove-LongItem   1.0.0.0
Rename-LongItem   1.0.0.0 

バージョンは5.0からですかね。(Install-Moduleが5から、PSAlphaFS自体がどうかは?)

モジュールは予め用意しなくても、勝手にダウンロードしてくる。
ただし、最初にNuGetを用意しておく必要があるのだと。
ただ、これも自動的にダウンロードしてくれるようなので成り行きに任せておけばなんとかなる。

image

2016年4月26日火曜日

PowerShellでTail

ログを監視するときなどに便利なtail(ファイルの最後を読み取る)。

前から出来ていたような気がしましたが3.0からなんですね。

>Get-Content  hoge.log –Wait  -Tail 0

Tailing Log Files - Power Tips - PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources

2016年3月17日木曜日

◆配列操作を速く行う

PowerShellで行う処理にシビアな速度を要求されることは多くないので、私は、PowerShellの処理速度をあまり気にしていない。

今回の話は、単純な配列を使うより「ArrayList」を使うと早いよってお話。
確かに速度は圧倒的に違うようだ。
Faster Array Manipulations - Power Tips - PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources

それでも1万回ループでの話なのでそれほど気にする局面は無いかも。
まぁ、覚えておいて損はない。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015

# SLOW
Measure-Command {
  $ar = @()
  for ($x = 1; $x -lt 10000; $x += 1) {
    $ar += $x
  }
}


# FAST
Measure-Command {
  [System.Collections.ArrayList]$ar = @()
  for ($x = 1; $x -lt 10000; $x += 1) {
    $null = $ar.Add($x)
  }
}

2016年3月15日火曜日

◆バージョンを比較する

Compare Versions - Power Tips - PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources

以前もほぼおなじ内容のTipsが出ていた。
Comparing Versions - Power Tips - PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources

特に大した話ではなく、Versionは文字列なので単純に比較すると意図した結果にならない。そこで、.NETのVersionクラスに変換して比較すると良いよってお話。

その時に、式の左側だけにキャスト指定をすれば、右側はPowerShellが自動的に合わせてくれる。(PowerShellは通常そういう動作をしたような気がする)

>[System.Version] '3.4.22.12' -gt '22.1.4.34'

2016年3月9日水曜日

◆Set-WinUserLanguageList(3.0)

キーボードレイアウトを設定する

英語キーボードにするにはこんな感じ。

>Set-WinUserLanguageList -LanguageList en-us

設定はリアルタイムにコンピュータ全体に適用される。
このままだと確認メッセージが表示されるが、Forceオプションを付ければ確認を回避できる。

2016年3月8日火曜日

◆違うオブジェクトを混ぜるな

Do Not Mix Different Objects!

以前、◆コンソール出力のオブジェクトマージ機能を回避するでちょっと書いたことがあるオブジェクト出力の話。

異なるオブジェクトを一緒にコンソール出力するとマージされて表示される。(共通の見出し項目で表示される)
その際、先に出現したオブジェクトのプロパティが優先して見出し項目に採用されるので、あとから来たオブジェクトの固有のプロパティは表示されなくなってしまう。

回避するにはそれぞれに「Out-Host」を挟むと良いってお話。

2016年2月12日金曜日

◆メモ帳に処理結果を出力する

PowerShellの結果を何処かにテキストファイルとして保存して、それをメモ帳で開く。
なんてのは以前やったことがあるが、これは未保存のテキストデータを直接メモ帳で表示しようというもの。

WindowsAPIを使って本格的にやっている。

プロファイルに入れておくと便利なこともあるかなぁ。

Send Text to Notepad