TechNetでPowerShellを学ぼう

MicrosoftのTechNetに、PowerShell専門のページがあるのをご存じでしょうか?

このページでは、入門から応用、タスク別のサンプルスクリプトといった多くのリンクがあり、多くのユーザーに役立つ情報が満載です。

カテゴリは下記のように大きく6つに分けられています。

  • 入門
    これからPowerShellを学ぼうとしている方必見です
  • 概要(タスク別)
    「PowerShellでどのようなことができるのか」をタスク別に見ることができます。業務で役立ちそうなスクリプトが満載です
  • 変換
    VBScriptのコードをPowerShellに変換したいユーザーは是非目を通しましょう
  • Hey! Scripting Guy
    Scripting GuyがQ&A形式でPowerShellのスクリプトを紹介しています。本家サイトはこちら
  • ガイド(オーナーマニュアル)
    PowerShellの基礎を習得したら是非目を通しましょう
  • 動画
    動画でPowerShellを学びたい方必見です

そのほかのおすすめとしてはTechNet Magazineがあります。

毎月発行されており、必ず1つはPowerShellの記事があります。バックナンバーもありますので興味がある方は是非!!

    [Tips]数字をカンマ付き文字列に変換

    PS C:\Users\daisuke> (122222222).ToString("#,#")
    122,222,222

     知ってると意外と便利かも?

    1GBは何バイトだーと聞かれたら

    PS C:\Users\daisuke> (1GB).ToString("#,#")
    1,073,741,824

    と、さくっと答えるとカッコイイです。

     フォーマット演算子-fを使ってもできます。

    PS C:\Users\daisuke> "{0:#,#}" -f 12345
    12,345

    複数の値を一気にするにはこうです。

    PS C:\Users\daisuke> 123456,11,111111|%{"{0:#,#}" -f $_}
    123,456
    11
    111,111

    PowerShellをすごく高機能な電卓と思って最近は愛用しています。[math]のスタティックメソッドも使いがいがありますよ!

    .NET開発者にもお勧め。intの最大値はいくつだ?って知りたいときは、

    PS C:\Users\daisuke> [int]::MaxValue
    2147483647

    で一撃です。

    Windows PowerShell 入門(10)が公開されました

    .NETアセンブリをロードするには(PowerShell 入門)

    今回は.NETアセンブリのロードについて説明したいと思います。

    PowerShellは.NET Frameworkを基盤としており、あらかじめロードされているアセンブリがいくつかあります。

    しかし、実際にやりたいことを実現するためには、ロード済みのアセンブリだけでは足りない場合があり、こういった場合は目的とするアセンブリをロードして、PowerShell上から使用できる様にする必要があります。

    ロード方法ですが

    [reflection.assembly]::LoadWithPartialName

    を使用します。

    たとえば Microsoft.VisualBasic 名前空間を使用できるようにするには

    [reflection.assembly]::LoadWithPartialName("Microsoft.VisualBasic")
    

    のようにしますが、このまま実行した場合は結果がAssemblyオブジェクトとして返されコンソールに表示されていまいます。

    スクリプトの中からロードする場合には、出力されると邪魔な場合もありますので先頭に[void]を付加して

    [void][reflection.assembly]::LoadWithPartialName("Microsoft.VisualBasic")
    

    とすることをおすすめします。メッセージが必要な方は[void]は付加しないでください。

     

    dllファイルのアセンブリのロードについても紹介しておきましょう。

    この場合は

    [reflection.assembly]::LoadFrom(dllファイル名)

    を使用します。

    こちらも同様にロード時にメッセージが出力されるので、回避したい方は先頭に[void]を付加してください。

    せっかくなので1つサンプルを紹介します。

    下記は Microsoft.VisualBasic
    をロードしてStrConvメソッドを使用できるようにして、ひらがなとカタカナを相互変換できるようにするものです。

    PS C:\Work> [void][reflection.assembly]::LoadWithPartialName("Microsoft.VisualBasic")
    PS C:\Work>
    PS C:\Work> $vbHiragana = [Microsoft.VisualBasic.VbStrConv]::Hiragana
    PS C:\Work> $vbKatakana = [Microsoft.VisualBasic.VbStrConv]::Katakana
    

    上記を入力し終えたら、「ひらがな」から「カタカナ」へ変換してみましょう。

    PS C:\Work> [Microsoft.VisualBasic.Strings]::StrConv("あいうえお", $vbKatakana)
    アイウエオ
    

    ついでに「カタカナ」から「ひらがな」へも変換してみましょう。

    PS C:\Work>  [Microsoft.VisualBasic.Strings]::StrConv("アイウエオ", $vbHiragana)
    あいうえお
    

    このようにアセンブリをロードし、ぜひPowerShellで.NET Frameworkを有効活用してみてください。

    switch 基本構文(PowerShell 入門)

    この記事は以前 http://blog.hiros-dot.net/ に書いたものです。

    PowerShellにおけるswitchは、ほかの言語のswitchと比較すると多くの機能を持ち備えています。

    何回かに分けて説明したいと思います。

    まず、基本構文ですが

    switch -options (評価する式)
    {
      <パターン> {実行するコマンドブロック}
      <パターン> {実行するコマンドブロック}
    :
      default    {実行するコマンドブロック}
    }

    となります。

    caseというキーワードがないことに気づきましたか? VB, C, C#などの言語を使用している方にはちょっと違和感があるかもしれません。

    では、早速ですが、この基本構文を使用した例を見てみましょう。

    PS > switch ( $a ) {
    >> 1 { Write-Host "`$a は 1 です" }
    >> 2 { Write-Host "`$a は 2 です" }
    >> 3 { Write-Host "`$a は 3 です" }
    >> 4 { Write-Host "`$a は 4 です" }
    >> 5 { Write-Host "`$a は 5 です" }
    >> }
    >>
    $a は 3 です
    

    上記は変数$aを評価し、該当するコマンドブロックの実行を行います。

    次に一致するパターンが複数あったらどうなるかをみてみます。

    PS >  switch ( $a ) {
    >> 1 { Write-Host "`$a は 1 です" }
    >> 2 { Write-Host "`$a は 2 です" }
    >> 3 { Write-Host "`$a は 3 です" }
    >> 3 { Write-Host "`$a は three です" }
    >> 4 { Write-Host "`$a は 4 です" }
    >> 5 { Write-Host "`$a は 5 です" }
    >> }
    >>
    $a は 3 です
    $a は three です
    

    上記のように該当するパターンすべてのコマンドブロックを実行します。

    次にbreakを使用する例を見てみましょう。

    先ほどの例のパターンの値が"3"(2つあるうちの最初のほう)にbreakを仕掛けます。

    PS >  switch ( $a ) {
    >> 1 { Write-Host "`$a は 1 です" }
    >> 2 { Write-Host "`$a は 2 です" }
    >> 3 { Write-Host "`$a は 3 です"; break }
    >> 3 { Write-Host "`$a は three です" }
    >> 4 { Write-Host "`$a は 4 です" }
    >> 5 { Write-Host "`$a は 5 です" }
    >> }
    >>
    $a は 3 です
    

    breakが実行されると、コードはそこで中断されてswitchを抜けるため、2つめのパターン"3"のコマンドブロックが実行されていないことがわかります。

    最後にdeafultキーワードについてみてみましょう。

    defaultキーワードは、どのパターンにも該当しない場合に行う処理を記述することができます。

    PS > $a = 7
    PS > switch ( $a ) {
    >> 1 { Write-Host "`$a は 1 です" }
    >> 2 { Write-Host "`$a は 2 です" }
    >> 3 { Write-Host "`$a は 3 です" }
    >> 4 { Write-Host "`$a は 4 です" }
    >> 5 { Write-Host "`$a は 5 です" }
    >> default { Write-Host "該当なし" }
    >> }
    >>
    該当なし