2013年3月19日火曜日

◆foreach自動変数

これまで使ったことは無かったのだが「$foreach」なる自動変数がある。
ちょっと使い道を調べてみた。

PS>foreach($i in 0..2){$foreach}
1
2

ん~、0,1,2ではなく1,2なんですね。
なぜでしょう。

$iも表示させてみましょう。

PS>foreach($i in 0..2){$i;$foreach}
0
1
2

PS>foreach($i in 0..2){$foreach;$i}
1
2
0

ん~、余計判らなくなった。

PS>foreach($i in 0..2){Write-Host $i -f Cyan;$foreach}
0
1
2

ヘルプを見てみましょう。
image

なるほど、列挙だからなのね。
「$foreach」をそのまま参照すると最後まで列挙されて終わっちゃうのですね。

現在の列挙値は「Current」プロパティで参照できる。

image

っと何となく仕様は判ってきたのだが、どんな時に使い出があるのか今一つ思いつかない。

検索してみてもあまり使っている例を見かけないなぁ・・・。

2013年3月13日水曜日

◆見出しタグを拾って目次をつける

以下のようなブログの見出しを拾って目次をつけてあげようかと思う。
HTMソースをクリップボードにコピーしてPowerShellで編集して貼り付けなおす。

image

結果はこんな感じに

image

必要に迫られて「えいや」と書いたのでちょっと力技チックだが、とりあえず動く。
ここでは<h5>を拾う仕様としている。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026

$cp = [Windows.Forms.Clipboard]

#ClipBoardから取得
$cp::GetText() 

$ctr = 1
$h5word = @()
$oString = $cp::GetText() -split "`r`n" |
 
 
%{  if($_ -match "<h5>(.*)</h5>"
){
       
$h5word += $Matches[1]
        $stCtr = ($ctr++).ToString("000"
)
       
$_ -replace "<h5>","<h5 id=`"id$($stCtr)`">"
      }else
{
       
$_
      }
    }


$outString = @()
$outString += "<ul>"
$h5word | %{$i=1
}{
   
$iSt=($i++).ToString("000"
)
   
$outString += "<li><a href=""#id{0}"">{1}</a></li>" -f $iSt,$_
}
$outString += "</ul>"
$outString += 
$oString
$cp
::SetText($outString -join "`r`n")

2013年3月7日木曜日

◆電源プランを設定する

今の電源プランを確認するには、

>Get-WmiObject -Name root\cimv2\power -Class Win32_PowerPlan | select elementname,description,isactive

image

変更するには、

>(Get-WmiObject -Name root\cimv2\power -Class Win32_PowerPlan -Filter 'ElementName="高パフォーマンス"').Activate()

2013年3月6日水曜日

◆PowerShellスクリプトをExeに変換する

PowerGUIを使うとスクリプトを簡単にExeへと変換できるようだ。
(いつのバージョンから出来るようになったのか定かではないが、比較的最近だと思われる)

必ずしもPowerGUIの専売特許という訳では無さそうですが・・・。
Make-PS1ExeWrapper | Keith Hill's Blog

 

「ツール」メニューから「Compile Script...」を選んで
image

表示されたダイアログで保存先とオプションを指定するだけ。
image

同じ場所にConfigファイルも作られるようだが、とりあえず無くても動作はするみたい。

何かしら制限があるのか無いのか、使いこんだわけではないので判らないが、さしあたって実行ポリシーは回避できるようだ。

ちょっと便利かも。

Compileの下にServiceを作るメニューもある・・・。

2013年3月4日月曜日

◆テキスト読み込み時の最後の改行

ネットを見ていて以下のような話題を見つけた。

PowerShell.org • View topic - Get-service -computername () error
image

テキストを読んでコンピュータ名を持ってきて処理しようとしたら、なぜかNullだって怒られるんだよね。って話みたい。

なんか見ればすぐにピンときそうなものだが、これ多分テキストの最後に改行が入ってるんでしょ。(get-content の結果が1行空いている)

結局、なんだか良く判らないけどテキストファイルを作りなおしたらうまくいったからまぁいいや、ってことで落ち着いたみたい。

PowerShellの第一人者「DonJ」氏も不思議がっているから、意外と盲点なのかも。

対策はどうするんでしょうね。

まぁ、判っているんならテキストファイルを修正するのが早いんだろうけど。

とりあえずこんな感じだろうか。

gwmi win32_computersystem -ComputerName ((gc names.txt) -ne "")

2013年3月2日土曜日

◆IIS、アプリケーションプールの状態を表示する

IISマネージャで見れる以下の状態をPowerShellで表示してみる。image

名前からすると「Get-WebAppPoolState」なんてのがいかにも使えそう。

直接名前を指定して状態を取得するのは問題ない。
image

しかし、名前を指定せずに纏めて表示となるとなぜかこんな表示になる。
image

こんな感じになっているので情報自体はあるのだが・・・
image

これを編集するのは気乗りがしないので、方針を変えてIISドライブを使ってみた。
image

そうそう、これこれ。いい感じ。

しか~し、
スクリプトファイルにしたらエラーになった。
image

あれ~、ドライブ参照の時は自動ロードしてくれないの?

なんかちょっと残念な感じ・・・。

image