SSブログ
QLOOKアクセス解析

Get-Content の Wait パラメターを使うときには encoding 指定が必要 [PowerShell]

2月23日にGet-Content の Wait パラメターの説明が無いと書いて、そのあと「動作がおかしい」と書き足していました。
その後調べていたら Microsoft Connect で情報を発見。
Get-Content test.log -wait -encoding unicode
とエンコーディングを明示的に指定すれば正しく動きますね。
指定しないと空白が余計に入ったり、日本語文字が化けたりしてしまいます。

とはいえ tail -f のようには使えないのは残念なまま・・・

Get-Content の Wait パラメターの説明が無い [PowerShell]

Get-Content コマンドレットの Wait スイッチパラメターの説明が
Version 1 の Get-Help では書かれていないことに、いまさらながら気づきました。
V2 CTP3 の Get-Help には一応登場します。
しかし PARAMETERS のところにも意味は記載されていません。
-Wait [<SwitchParameter>]
    Not Specified
となっています。

ストップされるまで入力をポーリングし続けるという動作を行います。

タグ:powershell CTP3

日本語の名前 [PowerShell]

PowerShell で変数名や関数名に日本語は使えるのでしょうか。
$あ = 123
PS > Get-Variable あ

Name    Value
----    -----
あ      123

どうやら使えるようです。
実際に使おうとは思いませんが。。。

では、いわゆる全角スペース(和字間隔)はどう扱われるのでしょう、
という重箱の隅をつつくような話を少し。

まず、関数名について確かめてみます。
function a { $myInvocation.MyCommand }
function あ { $myInvocation.MyCommand }
function b  { $myInvocation.MyCommand }
function c d { $myInvocation.MyCommand }

a

b 
c d

というスクリプト(bの後ろとcとdの間は全角スペース)を実行すると
CommandType     Name    Definition
-----------     ----    ----------
Function        a       $myInvocation.MyCommand
Function        あ      $myInvocation.MyCommand
Function        b       $myInvocation.MyCommand
Function        c d    $myInvocation.MyCommand

行頭でなければ全角スペースも関数名の一部として使えます。
空白文字とは解釈されておらず、4番目の例でも
c と d が別のトークンと扱われていないようです。

では変数名ではどうでしょう。
$a = 'abc'
$あ = 'あいう'
$b = 'bcd'
${c d} = 'cde'

こちらは空白文字として扱われるので
4番目のように空白を含む変数名の場合は{}で囲む必要があります。
囲まなければ

Unexpected token 'd' in expression or statement.

とエラーになってしまいます。

関数名の場合とは解釈のされ方が違うのですね。

ちなみに ${ }${ } は別の変数となります。

日本語の名前を使おうとして
間違えて全角スペースが入ってしまうと、
見た目に見分けがつきにくいエディタの場合
わけがわからなくなることでしょう・・・(笑)


PowerShell ISE の名前に込められた意図 [PowerShell]

PowerShell ISE (Integrated Scripting Environment) が
なぜ IDE (Integrated Development Environment)という名前ではないのかについて
Windows PowerShell in Action, Second Edition に書いてありました。

単にアプリケーション開発のための統合環境という位置づけではなく、
PowerShellのインタラクティブな利用のためのベースに使ってほしいということのようです。

最初のバージョンではまだまだやり残していることがあるけど、
ISE自身が PowerShell で scriptable なので、
自分の作るアプリケーションの部品としてemacsが使われるのと
同じように扱えるでしょうと。。。

(Lisp方面の人は「違う違う・・・」と言うかも?)

先日書いた Write-Progress の GUI 表示が行われたりするところで、
なんとなくそんな気がしていたのですが、やはりそうだったのかという感じです。

こうなるともっと使い込んでみたくなります。


タグ:powershell ise

Windows PowerShell in Action, Second Edition [PowerShell]

Windows PowerShell in Action の第2版は9月に出る予定なのですね。
待ち遠しいです。

Manning Early Access Program というので、
できた部分からの先行ダウンロード販売が行われているので買いました。
今のところ4章まで手に入ります。

http://www.manning.com/payette2/


タグ:powershell

[CTP3] ISE での Write-Progress 表示 [PowerShell]

PowerShell ISE だと Write-Progress の表示は、普通のコンソールのように色違いの文字でコンソール上部に表示されるのではなく、ダイアログボックスが出てきて、そこにプログレスバーとして表示されます。
ISE の環境だとその方が見やすいのでうれしいです。

progress.jpg

-ParentID を指定した、子動作状況は、親と同じダイアログ内にインデントされて表示されます。

ところで、ISEでは -Completed スイッチでプログレス表示を消す場合の動作がコンソールの時と異なっています。
コンソールの時は間違えて(親の動作状況に対して) -ParentId に -1 ではない値を指定してしまっていてもプログレス表示が消えていてくれたのですが、ISEでは正しく -1 を指定するか、あるいはそもそも -ParentID を指定しない場合でないとダイアログが消えてくれません。

ISE が悪いのではなく、コンソールでのチェックが甘いために自分のミスに気づいてなかったのですけど、なかなか原因に気づけませんでした。


タグ:powershell ise
人気ブログランキングへ
 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。