◆ISEのスニペットを使う(V3)VisualStudioではおなじみのスニペットがPowerShellでも使えるようになる。VisualStudioの様に可変部分を効率的に入力したりはできないようで、あくまでも定型文の読み込みができるだけといった感じ。J」で呼び出す必要がある。J」してから「foreach」と打つのが良さそうだ。スニペットは自分でも簡単に登録できるようになっていて「New-IseSnippet」というコマンド(関数)が用意されている。「Text」パラメータに登録内容を指定すれば良いのだが、複数行になる場合はヒア文字列で指定するのが良いだろう。mySnip1一旦登録したスニペットを削除する機能は用意されていないようなので、以下にあるスニペットの内容を保持したXMLファイルを直接削除する必要がありそうだ。3この様な処理があったとして、「f1」が「Null」を返すとこんな感じになる。isこの結果はあまり意味がないので出力を抑止したいというケースが多いのだろう。$i"}}PS>V3では自分で条件判定せずともNullに対する列挙を回避してくれるようだ。$i"}PS>ただし、使い方は若干注意が必要なようで以下の様にするとうまくいかない。isこんな時は以下のようにしてあげると良さそうだ。◆ハッシュテーブルからカスタムオブジェクトへのキャスト(V3)ハッシュテーブルをキャストしてカスタムオブジェクトが作れるようになった。y=2}これまで以下の様に書いていたのと同じ事だろうか。◆検証属性を変数にも適用可能にする(V3)これまでは検証属性というとパラメータにのみ適用できたのだが、V3からは変数にも適用できるらしい。以下では「$a」の長さが「1桁~5桁」、「$x」の値の範囲が「1~10」に限定している。変数の有効な値ではないため、変数を検証できません。変数の有効な値ではないため、変数を検証できません。◆’.’と’’::’の後ろにスペースや改行を許可する(V3)スクリプトの行が長くなってくると適度なところで改行を入れたくなる。PowerShellは継続サイン「`」を入れなくても改行できる場所があったりするのだが、’.’と’’::’の後ろでも改行が可能になったらしい。"◆フルネーム"(dir).FullName"◆int最大値"[int]::MaxValueしかし、普段スクリプトを書いていて改行できなくて困るのはコマンドレットのパラメータの数が多くて長くなってしまう時なのだが、今のところそのケースでは有効な改行手段は見つけられなかった。%{$_.FullName}このようなスクリプトの時に、「$_」が何か判り辛いという意見が多かったので「$_」のエイリアスとして「$PSItem」を定義しました。なんとなく通常とは逆の発想のエイリアス。自分で使うことはなさそうだが、読めるようにはしておかないと・・・。◆リダイレクト演算子の追加(V3)これまではエラーまでしかリダイレクトできなかったのがWarningとかも可能になったようです。a.txt単独でリダイレクト、全部をリダイレクトはこれで良いのですが、何かと何かを合わせてリダイレクトはどうするんですかね。a.txtこんな感じですかね。Blogsで説明されていたV3の機能をちょっと試してみました。便利になった単数と複数を同一視してくれる機能。a.txt上記のようなディレクトリで以下のようなコマンドを実行すると、PS>(dir).fullnameC:\Users\minminnana\test\a.txtとなります。これがうまくいくのはどちらかというと「たまたま」で、誰かがここにファイルを追加したりすると突然機能しなくなります。b.txtPS>(dir).fullnamePS>これは、(dir)で返ってくるオブジェクトが単数の場合はファイルオブジェクト、複数の場合はオブジェクト配列になることが原因です。System.Arrayこの単数と複数の挙動の違いは誰しもが一度は嵌る道のように思います。これまでは、この単数と複数の挙動の違いを吸収するために@()などで変数を定義して単数でも配列扱いとする方法が使われましたが、V3ではPowerShell側がこの違いを良きに計らってくれるようです。V3ではこんな感じになります。b.txtPS>(dir).fullnameC:\Users\minminnana\test\a.txtC:\Users\minminnana\test\b.txtこれまでは、複数オブジェクトの場合は自分でループして個々のプロパティを参照する必要がありました。fullnameC:\Users\minminnana\test\a.txtC:\Users\minminnana\test\b.txt(最初の例はこれまでのV2の書き方、2つ目はV3での書き方。fullnameどちらもタイプ量的には似たようなものですが、Blogによると前者のほうが(内部的にパイプ処理に展開しているわけではないので)高速だと書いてあるように読めました。他にもCountプロパティが参照できたり添え字付きで参照できたりといった感じになっているようです。オブジェクトにインデックスを付けることはできません。1PS>$a.count1PS>$a[0]1また、もともとオブジェクト配列に持っているプロパティの場合はそちらが優先されるようです。◆イベントログを削除するコマンドレットは用意されていないようだが.Netのクラスを使うと簡単に削除できる。(規定)のPropertyType(種類)を変更するSharePointの作業をしていて、手順書に以下のような作業が載っていた。”{E8978DA6-047F-4E3D-9C78-CDBE46041603}”である必要があります。違う値が入っている場合は、この決められた値に変更します。該当の場所に「.pdf」キーを作成する。すると以下の様なデフォルト値が作成される。この値に”{E8978DA6-047F-4E3D-9C78-CDBE46041603}”を指定してあげれば良さそうだが、他の拡張子の設定値を見るとどれも「種類」が「REG_SZ」ではなく「REG_MULTI_SZ」になっている。そこで、なんとかこれを「REG_MULTI_SZ」にしようと思ったのだが、どうにもこうにもやり方が見つからない。(もしかするとGUIではできないのかも)仕方がないのでPowerShellで更新することに。(既定)の更新の仕方や、種類の指定の仕方を調べて以下のような感じになった。{E8978DA6-047F-4E3D-9C78-CDBE46041603}(既定)はそのまま(default)で良いようだ。「種類」はGUIでは以下の様になっているが、PropertyTypeとしては以下から対応する値を指定する。◆svchostプロセスのサービスを纏めて表示するでの結果表示はプロセス毎なので、それぞれで色が変わったりすると見やすいと思い、ちょっと変更してみました。$color}}いい感じ。ちなみに、グルーピングせずに単純にオルタネイト表示する場合は、こんな感じでしょうか。コマンドレット◆svchostプロセスのサービスを纏めて表示するタスクマネージャでプロセスタブを見ていると「svchost」なるプロセスをたくさん見かける。説明を見ると「Windowsサービスのホストプロセス」とある。これらのプロセスが各種Windowsのサービスをホストしているという事になる。それぞれのプロセスがどんなサービスをホストしているかは、該当プロセスを右クリックして表示されたコンテキストメニューから「サービスの表示」を選んであげると以下の様に表示される。これを見ると、1つのプロセスが複数のサービスをホストしていることが判る。次に、これらを纏めてPowerShellで表示させてみたのが以下のスクリプトである。$_.displayname}}「Get-Service」コマンドレットではプロセスIDが見当たらなかったので、「Win32_Service」を使っている。それ以外は特別なところは無い。◆ActiveDirectoryオブジェクトのプロパティを比較する以下のやり取りを見ていてActiveDirectoryオブジェクトのプロパティを調べてみたくなりちょっと試してみました。「Get-ADUser」で返ってくるのは「Microsoft.ActiveDirectory.Management.ADUser」この2つのオブジェクトのプロパティが比較的できればOKAD関連のオブジェクトはサイズが大きいせいか明示的に「Property」パラメータで指定しないと返ってこないプロパティが多い。全プロパティはどうなっているのか。MSDNをちょっと探してみたが見つからない・・・。仕方がないので適当にやってみたら「Property」パラメータに「*」を指定すると全部返ってくるみたい。全プロパティが取ってこれればあとは比較するだけ。◆Windows8RPのPowerShellヘルプの続き。あまりに使いづらいのでもう少し調べてみました。ヘルプをダウンロードした時にローカルのヘルプファイルを更新する権限が無いような感じです。「管理者として実行する」で一旦「Get-Help」を実行してダウンロードしておけばその後はダウンロードを要求されなくなるようです。自分から取りに行く場合は「Update-Help」を実行するのかな。オンライン側のHELPが更新されたのを知らせる仕組みがあるのかどうかは今のところ判りませんが・・・。ちなみに、Windows7では「ユーザーアカウント制御の設定」を「通知しない」にするとPowerShellは通常でも管理者権限で起動するように思うのですが、Windows8ではそうならないようです。◆Windows8RPのPowerShellヘルプWindows8RPがリリースされました。それほど興味はないのですがPowerShellの最新版が使ってみたいのでインストールしてみました。ヘルプファイルが追加されているか興味があったので早速Get-Helpすると以下のような問い合わせが表示され、「Y」をこたえると何やらダウンロードが始まった風。これでやっと新コマンドの使い方が解るのかと期待したのもつかの間、表示されたヘルプ自体はDetailではない風。したことかこのヘルプ君、どのコマンドをヘルプしても毎回ダウンロードを訪ねてくる。コマンドごとにダウンロードファイルが違うのかと一瞬思ったが、プログレスを見ていると同じものっぽい。自己紹介minminnana地方でSE(プログラマ)をやって20年。気づけばいつの間にやら窓際人生。このまま余生を過ごすには若干心残りな2児と2匹(ウサギ、犬)の父。SEと言っても窓際なのでブログやWEBなどにはめっぽう疎い・・・。独学で.NET系を弄ってみるがCOBOLプログラマーにはだいぶ敷居が高い。