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」を挟むと良いってお話。