入海 posted on 7月 30, 2008 00:38

PowerShellのコンソールを起動すると普通のコマンドラインに比べて起動が遅いなと感じる。これは.NETの性質に由来するもので、MSIL(中間言語)を実行時にJIT(Just in Time)コンパイルするためである。実行時に機械言語へのコンパイルを行っているのだ。このJITコンパイル方式はあらゆるCPUやOSに対応させるためにインタプリタの利点を生かしたまま実行時には機械言語の処理速度を保てるという利点がある。

でも考えても見るとPowerShellが必要な環境では多種のOSで動く必要が今のところはない。速く起動してくれるに越したことはないのだ。それを実現するためにはMSILをすでに機械言語にコンパイルさせていればその実行時にその過程が不必要になるために速くなる。.NET Frameworkにはngenというのがあってこれを使うと事前コンパイルを可能にしてくれる。

ネイティブ イメージ ジェネレータ (Ngen.exe) は、マネージ アプリケーションのパフォーマンスを向上するツールです。Ngen.exe は、コンパイルされたプロセッサ固有のマシン コードを含むファイルであるネイティブ イメージを作成してローカル コンピュータのネイティブイメージ キャッシュにインストールします。ランタイムは、JIT (Just-In-Time) コンパイラを使用してオリジナルのアセンブリをコンパイルする代わりに、キャッシュにあるネイティブ イメージを使用できます。(MSDNより

 

そのngenを使って実際に起動を速くするスクリプトがPowerShell Team Blogに載っていたので下に抜粋しておく。

Set-Alias ngen @(
dir (join-path ${env:\windir} "Microsoft.NET\Framework") ngen.exe -recurse |
sort -descending lastwritetime
)[0].fullName
[appdomain]::currentdomain.getassemblies() | %{ngen $_.location}

上のスクリプトを.ps1ファイルに保存してPowerShellから実行してPowerShellのコンソールを起動してみると、起動が数倍速くなっている。ぜひ試してみてほしい。


Posted in: PowerShell  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

# この記事は以前 C#と諸々 に書いた記事 (を一部修正したもの) です。

PowerShell V1.0 では、C# の try - catch - finally のような構造化例外処理がサポートされていません。しかし、trap ブロック、throw ステートメント、break ステートメント、continue ステートメント、そしてスコープについて理解すれば、try - catch - finally を擬似的に再現することができます。

というわけで、次のコードのように C# の try - catch - finally に近い例外処理を実現する関数を書きました。

try {
    # 処理
} catch ([例外の型]) {
    param($ex)
    # 例外処理
} finally {
    # 後処理
}

使用する際は次の点に気を付けてください。

  • 各ブロックの開始の "{" の前と各ブロックの終了の "}" の後ろは、上記のように、改行せずに記述する必要があります。
  • 例外の型は、上記のように、必ず "()" で囲む必要があります。
  • catch または finally は、省略可能です。例外の型も省略可能です。
  • catch ブロック内では、break ステートメントを使用して例外を再スローすることができます。当然、任意の例外を throw ステートメントでスローすることもできます。

で、これらを実現するための関数がこちらです。

function global:try
{
    $currentArgIndex = 0;
    $tryBlock = $args[$currentArgIndex];
    $currentArgIndex++;
    if ($tryBlock -isnot [System.Management.Automation.ScriptBlock])
    {
        throw New-Object "ArgumentException" @("try ブロックの指定が不正です。");
    }
    if ("catch" -eq $args[$currentArgIndex])
    {
        $currentArgIndex++;
        if ($args[$currentArgIndex] -is [Type])
        {
            $targetExceptionType = $args[$currentArgIndex];
            $currentArgIndex++;
        }
        $catchBlock = $args[$currentArgIndex];
        $currentArgIndex++;
        if ($catchBlock -isnot [System.Management.Automation.ScriptBlock])
        {
            throw New-Object "ArgumentException" @("catch ブロックの指定が不正です。");
        }
    }
    if ("finally" -eq $args[$currentArgIndex])
    {
        $currentArgIndex++;
        $finallyBlock = $args[$currentArgIndex];
        $currentArgIndex++;
        if ($finallyBlock -isnot [System.Management.Automation.ScriptBlock])
        {
            throw New-Object "ArgumentException" @("finally ブロックの指定が不正です。");;
        }
    }
    if (($() -eq $catchBlock) -and ($() -eq $finallyBlock))
    {
        throw New-Object "ArgumentException" @("catch ブロックまたは finally ブロックを指定してください。");
    }
    &{
        $requireFinally = ($() -ne $finallyBlock);
        &{
            &$tryBlock;
            trap
            {
                if ($() -eq $catchBlock)
                {
                    break;
                }
                $ex = $_.Exception;
                if (($() -ne $targetExceptionType) -and (!$targetExceptionType.IsAssignableFrom($ex.GetType())))
                {
                    break;
                }
                &$catchBlock $ex;
                continue;
            }
        };
        if ($requireFinally)
        {
            $requireFinally = $False;
            &$finallyBlock;
        }
        trap
        {
            if ($requireFinally)
            {
                $requireFinally = $False;
                &$finallyBlock;
            }
            break;
        }
    };
}

以下のスクリプトを実行すると、動作が確認できます。

try {
    "try ブロック実行";
    throw New-Object "ArgumentException";
    "この文は出力されない";
} catch ([ArgumentException]) {
    param ($ex)
    "{0} がスローされたから catch ブロック実行" -f $ex.GetType().Name;
} finally {
    "finally ブロック実行";
}

出力は以下のようになります。

try ブロック実行
ArgumentException がスローされたから catch ブロック実行
finally ブロック実行

なお、PowerShell V2.0 では、try - catch - finally が標準でサポートされるようです。なので、V2.0 ではこの関数は不要になるのですが、もし V1.0 で try - catch - finally を使用したいという方はぜひこの関数を試してみてください。


Posted in: PowerShell  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 7月 24, 2008 23:37

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

PowerShellはコマンドレットを実行するだけの環境ではありません。

スクリプト実行環境も備えたシェルです。

PowerShellで実行可能なスクリプトを作成していく上で(いやどんな言語においても)変数は欠かせません。

今回はPowerShellにおける変数について説明したいと思います。

PowerShellでの変数は先頭に$記号をつけます。

$var や $hensu のように表します。

変数の宣言方法ですが、New-Variableコマンドレットを使用して

New-Variable var -value "Test"

のようにするか

$var = "Test"

のように変数に値を割り当てます。

PowerShellは代入された値によって型を自動で認識しますので、先ほどのように

$var = "Test"

とした場合には、変数はString型になります。また

$var = 10

とした場合はint型になります。

変数にどんな値が這いいてるかを確認するには、コマンドラインで単純に 変数名[Enter] と入力します。

PS > $var
Test

次に変数の型の確認方法ですが、コマンドラインで 変数名.GetType()[Enter] と入力します。

PS> $var.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Name列に表示されているのが、変数の型になります。

最後に、PowerShellではスペースを組み合わせた変数を作成することができます。

この場合は{}を使用して表す必要があります。

${var x}
次回は型を指定して変数を作成する方法について説明したいと思います

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Admin posted on 7月 23, 2008 09:55

PowerShell from Japan!!のロゴを作ってみました。

宣伝していただけると助かります。

大きいサイズのタグは下記の通りです

<a href="http://powershell.hiros-dot.net" target="_blank" title="PowerShell from Japan!!">
<img src="http://powershell.hiros-dot.net/images/LogoBig.jpg" width="323" height="87" />
</a>

小さいサイズのタグは下記の通りです

<a href="http://powershell.hiros-dot.net" target="_blank" title="PowerShell from Japan!!">
<img src="http://powershell.hiros-dot.net/images/LogoSmall.jpg" width="223" height="44" />
</a>


Posted in:   Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

はじめまして、嗣永モモコーラと申します。

編集方法がよくわからず、何回も失敗して変なエントリをあげてしまいました。すいません……。

PowerShellは、2.0 CTPのみだったと思うのですが、パーサが利用できます。これを使って、PowerShellのスクリプトファイルをHTMLへ変換するスクリプトを作成しました。以下は、そのスクリプトを自分自身でHTMLへ変換したものです。

前にも一度作った事があったので、今回は余分な機能として、Alias(コマンドの別名)が設定されている場合に、元の名前に戻した上でHTMLを出力するようにしてみました。たとえば、"gc"はデフォルトで用意されたGet-ContentコマンドレットのAliasなので、スクリプト中に gc "hogehoge.txt" という部分があった場合、Get-Content "hogehoge.txt"に変換して出力します。

Aliasは普段利用しない人にとっては可読性が落ちるかもしれないのと、profile.ps1などで独自に設定したAliasがスクリプトに残っていると、他の環境では動かなかったりしてつらい思いをすることがあるからです。

利用する際は以下のスクリプトをファイルに保存し、第一引数に変換したいスクリプトファイル名を渡してください。変換後のHTMLはそのまま戻り値になるので、リダイレクトしてファイルに保存するなどしてください。

スクリプトファイルの文字コードがutf-8決め打ち、CSSファイルを編集できない環境を想定してスタイル埋め込みになっている、色が好みでない、などの点は適宜改造していただけるとありがたいです。ではでは。

追記:ここ(PowerShell from Japan!!)が空行や空スペースに手を入れる?仕組みのようなので、改行やスペースを全て実体参照に変更しました

追々記:<br /><br />も変換されてしまうようなので、<br />&nbsp;<br />に変換してます。

# Token単位でHTMLへ変換
function TokenToHtml($t){
  # NewLineは単に改行
  if($t.Type -eq "NewLine"){ return "<br />" }
 
  # 該当部分のソースを取得
  $w = (Get-Src $t.StartLine $t.StartColumn $t.EndLine $t.EndColumn)
 
  # Tokenのタイプ別にhtmlへ
  switch($t.Type) {
    "Comment"  { return '<span style="color: rgb(0, 255, 0);">' + $w + '</span>' }
    "Keyword"  { return '<span style="color: rgb(160, 160, 255);">' + $w + '</span>' }
    "Operator" { return '<span style="color: rgb(255, 165, 0);">' + $w + '</span>' }
    "String"   { return '<span style="font-weight: bold;">' + $w + '</span>' }
    "Type"     { return '<span style="font-weight: bold; color: rgb(46, 139, 87);">' + $w + '</span>' }
    "Command"  { return '<span style="color:rgb(160, 160, 255); ">' + (ToDefinition $w) + '</span>' }
    default { return $w }
  }
}
 
# エイリアスだったら元の名前を返す。なければそのまま
function ToDefinition($name){
  $def = (Get-Alias -Name $name -ErrorAction SilentlyContinue)
  if($def -ne $null){
    return $def.Definition
  }
  return $name
}
 
# 変換元ソースの該当箇所を取得 / 0スタートなので、Tokenの返す値から-1する
function Get-Src($s_line, $s_col, $e_line, $e_col){
  $s_line -= 1; $s_col -= 1; $e_line -= 1; $e_col -= 1;
 
  # 複数行にわたる場合があるため、ループ
  for($line = $s_line; $line -le $e_line; $line++){
    if($line -eq $s_line) { $s = $s_col }
                    else  { $s = 0 } 
    if($line -eq $e_line) { $e = $e_col }
                    else  { $e = $src[$line].Length } 
    $ret += $src[$line].Substring($s, $e - $s) + "`n"
  }
  $ret = $ret.Substring(0, $ret.Length - 1);
  return $ret.Replace('&', '&amp;').Replace('<', '&lt;').Replace('>', '&gt;').Replace(' ', '&nbsp;').Replace("`n", "<br />")
}
 
# ヘッダ
$header = 
@"
<html>
  <head>
    <title>out</title>
  </head>
 
  <body>
    <pre class="pssource" style="background-color: rgb(0, 0, 0); color: rgb(0, 255, 255); padding: 3px; font-family: consolas;">
"@
 
# フッタ
$footer =
@"
    </pre>
  </body>
</html>
"@
 
##############################################
# ここからMain
##############################################
# 変換するPSのソース
$src = Get-Content $args[0] -enc utf8
 
# parserへ渡せる形式へ変換
$sb = New-Object System.Text.StringBuilder
$src | ForEach-Object { [void]$sb.Append($_ + "`n") }
 
# エラー出力 / 使わないけど宣言してないと怒られるので
Set-Variable err
 
# パース
$token = [System.Management.Automation.PsParser]::Tokenize($sb.ToString(), [ref]$err)
 
# HTMLへ出力する文字列
$html = New-Object System.Text.StringBuilder
 
[void]$html.Append($header)
 
$pre = $null
 
# Tokenごとに出力
$token | ForEach-Object {
  # Tokenに含まれないもの(空白など)を出力
  if($pre -ne $null -and ($pre.EndLine -ne $_.StartLine -or $pre.EndColumn -ne $_.StartColumn)){
    [void]$html.Append((Get-Src $pre.EndLine $pre.EndColumn $_.StartLine $_.StartColumn))
  }
 
  # Tokenを出力
  [void]$html.Append((TokenToHtml $_))
 
  $pre = $_
}
 
[void]$html.Append($footer)
 
$html.ToString().Replace("<br /><br />", "<br />&nbsp;<br />")

Posted in: PowerShell  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

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

 

Group-Objectコマンドレットを使用すると、同じプロパティの値を持つオブジェクトでグルーピングを行うことができます。

たとえば私のPCの C:\Work には下記のようなファイルがあるのですが

PS C:\Work> dir
ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Work
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2008/03/07     18:39         28 1stList.csv
-a---        2008/04/01     22:53      17226 CommandList.txt
-a---        2008/04/06     22:15      23848 PSCmd.txt
-a---        2008/03/20     22:50        880 replace.ps1
-a---        2008/03/08      0:10         89 Select.csv

これを拡張子別にグルーピングしてみたいと思います。

PS C:\Work> Get-ChildItem *.* | Group-Object Extension
Count Name                      Group
----- ----                      -----
2 .csv                      {1stList.csv, Select.csv}
2 .txt                      {CommandList.txt, PSCmd.txt}
1 .ps1                      {replace.ps1}

きちんと拡張子別にグルーピングがされ、どの拡張子でグルーピングをしたのか、また要素数(Count)がいくつかなどの情報を得ることができます。

今回、Group-ObjectでExtensionを指定したのですが、ほかのメンバーを指定することも可能です。

指定可能なメンバーはパイプに渡されるオブジェクトのメンバーです。この場合はGet-ChildItemから得られるオブジェクトになります。

指定可能なメンバーの情報を取得するには

PS C:\Work> Get-ChildItem | Get-Member -MemberType property
TypeName: System.IO.FileInfo
Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   System.DateTime CreationTime {get;set;}
CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
Directory         Property   System.IO.DirectoryInfo Directory {get;}
DirectoryName     Property   System.String DirectoryName {get;}
Exists            Property   System.Boolean Exists {get;}
Extension         Property   System.String Extension {get;}
FullName          Property   System.String FullName {get;}
IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
Length            Property   System.Int64 Length {get;}
Name              Property   System.String Name {get;}

のように Get-Memberコマンドレットで調べることが可能です


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

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

Where-Objectコマンドレットを使用すると、特定条件でデータを抽出することができます。

今回は、このWhere-Objectコマンドレットを使用して、自PCのサービスが停止しているものだけを抽出してみたいと思います。

まずは、自PC内のサービスを取得する方法ですが、これにはGet-Serviceコマンドレットを実行します。

PS C:\Work> Get-Service
Status   Name               DisplayName
------   ----               -----------
Running  AeLookupSvc        Application Experience
Stopped  ALG                Application Layer Gateway Service
Running  AppHostSvc         Application Host Helper Service
Running  Appinfo            Application Information
Stopped  aspnet_state       ASP.NET State Service
Running  AudioEndpointBu... Windows Audio Endpoint Builder
Running  Audiosrv           Windows Audio
Running  BFE                Base Filtering Engine
Running  bgsvcg             B's Recorder GOLD General Service
Running  BITS               Background Intelligent Transfer Ser...
:
:長いので省略

上記結果からわかるように、Statusが"Stopped"のものがサービスが停止している項目です。

抽出したいデータは Statusが"Stopped"のものなので

PS C:\Work> Get-Service | Where-Object { $_.Status -eq "Stopped" }

と記述します。$_ は前回も説明したように、パイプで受け取ったオブジェクトが格納されている特殊な変数です。

「Status が "Stopped"に等しい」を $_.Status = "Stopped" と書かないように注意してください。

(=は代入を意味する演算子なので、エラーになってしまいます。)

実行結果は下記のようになります。

PS C:\Work> Get-Service | Where-Object { $_.Status -eq "Stopped" }
Status   Name               DisplayName
------   ----               -----------
Stopped  ALG                Application Layer Gateway Service
Stopped  aspnet_state       ASP.NET State Service
Stopped  CertPropSvc        Certificate Propagation
Stopped  clr_optimizatio... Microsoft .NET Framework NGEN v2.0....
Stopped  COMSysApp          COM+ System Application
Stopped  DFSR               DFS Replication
Stopped  dot3svc            Wired AutoConfig
Stopped  EapHost            Extensible Authentication Protocol
Stopped  ehRecvr            Windows Media Center Receiver Service
Stopped  ehSched            Windows Media Center Scheduler Service
Stopped  ehstart            Windows Media Center Service Launcher
Stopped  FontCache3.0.0.0   Windows Presentation Foundation Fon...
:
:長いので省略
次回はグルーピングを行うGroup-Objectコマンドレットについて説明したいと思います

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

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

今回は、パイプ演算子と共に使用する Select-Objectコマンドレットを紹介します。

Select-Objectコマンドレットはオブジェクトまたは一連のオブジェクトの指定されたプロパティを選択します。

Get-ChildItemコマンドレットが持つプロパティの指定したものだけを抜き出してみましょう。

その前に Get-ChildItemコマンドレットで取得可能なプロパティを調査してみます。

Get-Memberコマンドレットで-MmemberTypeパラメータにpropertyと指定することでプロパティのみを表示します。

PS C:\Work> Get-ChildItem | Get-Member -MemberType property
TypeName: System.IO.FileInfo
Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   System.DateTime CreationTime {get;set;}
CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
Directory         Property   System.IO.DirectoryInfo Directory {get;}
DirectoryName     Property   System.String DirectoryName {get;}
Exists            Property   System.Boolean Exists {get;}
Extension         Property   System.String Extension {get;}
FullName          Property   System.String FullName {get;}
IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
Length            Property   System.Int64 Length {get;}
Name              Property   System.String Name {get;}

多くのプロパティを持っていることがわかります。

では、Get-ChildItemで取得できる結果からFullNameとLastWriteTimeの列のみを抜き出してみましょう。

特定のプロパティを抽出するにはSelect-Objectコマンドレットを使用します。

抽出したい項目をSelect-Objectの隣にカンマで区切って記述します。

PS C:\Work> Get-ChildItem | Select-Object FullName, LastWriteTime
FullName                                                    LastWriteTime
--------                                                    -------------
C:\Work\Debug.ps1                                           2008/07/11 23:19:01
C:\Work\err.txt                                             2008/07/17 22:41:56
C:\Work\Scope1.ps1                                          2008/07/16 22:02:24
C:\Work\Scope2.ps1                                          2008/07/16 22:09:31
C:\Work\Scope3.ps1                                          2008/07/16 22:26:39
C:\Work\Scope4.ps1                                          2008/07/16 22:28:11
C:\Work\Scope5.ps1                                          2008/07/16 22:30:27
C:\Work\Strict.ps1                                          2008/07/17 22:28:24
C:\Work\Test.xml                                            2008/07/08 23:38:56
C:\Work\trap.ps1                                            2008/07/08 23:11:15
C:\Work\trap1.ps1                                           2008/07/08 23:16:29

どうでしょうか?  Select-Objectコマンドレットを使用すると、必要なプロパティのみを抽出することができますね。

次回はWhere-Objectコマンドレットについて説明したいと思います。


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 7月 17, 2008 21:57

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

Sort-Objectコマンドレットを使用すると、パイプで受け取ったデータ(オブジェクト)の並べ替えを行うことができます。

たとえば、dirコマンド(Get-ChildItemコマンドレット)で取得した結果をデータサイズ順に並べ替える例を見てみましょう。

PS C:\Work> dir | Sort-Object { $_.Length }
ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Work3
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2008/01/09     15:29          8 Test03.txt
-a---        2008/01/09     15:35         50 Test05.txt
-a---        2008/01/09     15:35         50 Test01.txt
-a---        2008/01/09     17:45        102 Test02.txt
-a---        2008/01/09     17:45        102 Test04.txt

最初に、Sort-Objectコマンドレットの隣にある $_ について説明します。

パイプ演算子(|)を使用してデータを受け取ると、受け取ったデータは $_ に代入されます。$_は特殊な変数です。

$_.Length とすることで受け取ったデータのLengthプロパティを指し示すことになります。

上記の例では Sort-Object { $_.Length } としているので、データサイズ順に並べ替えることを意味します。

また、Sort-Objectコマンドレットでは並べ替えに昇順/降順を指定することが可能です。

パラメータを指定しない場合は昇順となります。(上記の例)  -descending パラメータを使用した場合は降順となります。

ということで、先ほどの並べ替えを降順でやってみましょう。

PS C:\Work> dir | Sort-Object -Descending { $_.Length }
ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Work3
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2008/01/09     17:45        102 Test02.txt
-a---        2008/01/09     17:45        102 Test04.txt
-a---        2008/01/09     15:35         50 Test05.txt
-a---        2008/01/09     15:35         50 Test01.txt
-a---        2008/01/09     15:29          8 Test03.txt

次回はSelect-Objectコマンドレットについて説明したいと思います。


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 7月 17, 2008 21:47

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

「コマンドレットはオブジェクトを返す」でさらっとパイプラインを使用しましたが、使い方について説明を行いませんでした。

今回はこのパイプラインについて説明したいと思います。

パイプラインは、パイプ演算子(|)で区切られた一連のコマンドです。

パイプラインを使用すると前のコマンドの結果(オブジェクト)を受け取り、次のコマンドへと渡します。

1つ例を見てみましょう。

PS > Get-Date | Get-Member

上記はGet-Dateコマンドレットが返すオブジェクトのメンバー一覧を表示します。

パイプ演算子を使用することで、Get-DateのオブジェクトをGet-Memberへ渡しています。

結果として、Get-Dateが持つメンバー一覧が表示されます。

PS > Get-Date | Get-Member
TypeName: System.DateTime
Name                 MemberType     Definition
----                 ----------     ----------
Add                  Method         System.DateTime Add(TimeSpan value)
AddDays              Method         System.DateTime AddDays(Double value)
AddHours             Method         System.DateTime AddHours(Double value)
AddMilliseconds      Method         System.DateTime AddMilliseconds(Double value)
AddMinutes           Method         System.DateTime AddMinutes(Double value)
AddMonths            Method         System.DateTime AddMonths(Int32 months)
AddSeconds           Method         System.DateTime AddSeconds(Double value)
AddTicks             Method         System.DateTime AddTicks(Int64 value)
AddYears             Method         System.DateTime AddYears(Int32 value)
GetHashCode          Method         System.Int32 GetHashCode()
GetType              Method         System.Type GetType()
GetTypeCode          Method         System.TypeCode GetTypeCode()
get_Date             Method         System.DateTime get_Date()
get_Day              Method         System.Int32 get_Day()
get_DayOfWeek        Method         System.DayOfWeek get_DayOfWeek()
get_DayOfYear        Method         System.Int32 get_DayOfYear()
get_Hour             Method         System.Int32 get_Hour()
get_Kind             Method         System.DateTimeKind get_Kind()
get_Millisecond      Method         System.Int32 get_Millisecond()
get_Minute           Method         System.Int32 get_Minute()
get_Month            Method         System.Int32 get_Month()
get_Second           Method         System.Int32 get_Second()
get_Ticks            Method         System.Int64 get_Ticks()
get_TimeOfDay        Method         System.TimeSpan get_TimeOfDay()
get_Year             Method         System.Int32 get_Year()
:
:長いので省略
:

次回以降のPowerShell入門のエントリーでパイプラインと共に使用するコマンドレットについて説明していきたいと思います。

 


最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Calendar

«  1月 2009  »
月曜火曜水曜木曜金曜土曜日曜
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678
View posts in large calendar

Recent Posts

Recent Comments

Banners

Theme Grabber
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2009 PowerShell from Japan!!