HIRO posted on 8月 24, 2008 23:56

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

今回は包含演算子について説明したいと思います。

包含演算子は、コレクション内に指定した値が含まれているかどうかをTRUE/FALSEで返す演算子で、下記の2つがあります。

演算子 説明
-contains, -icontains, -ccontains コレクションに指定した値が含まれている
-notcontains, -inotcontais, -cnotcontains コレクションに指定した値が含まれていない

演算子の先頭に"i"をつけた場合(-icontains および -inotcontains)と先頭に何も文字を付加しない場合(-contains, -notcontains)は大文字と小文字を区別しません。また、演算子の先頭に"c"を付けた場合(-ccontains, -cnotcontains)は大文字と小文字を区別します。

下記は数値1,2,3,4,5のいずれかに3が含まれているかを評価します。1,2,3,4,5のコレクションには3が含まれているのでTrueが返されます。

PS > 1,2,3,4,5 -contains 3
True

また、下記はコレクションの中に"BANANA"が含まれているかを評価します。

PS > "ORANGE","BANANA","GRAPES" -contains "BANANA"
True

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

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

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

今回は比較演算子でちょっとした実験を行ってみたいと思います。

比較演算子の説明は「比較演算子(PowerShell 入門)」を参照願います。

下記のように数値の2と2を-eq演算子で比較した場合、当然これは等しいのでTrueが返されます。

PS > 2 -eq 2
True

では、次のように数値の2と文字列"2"を比較したらどうなるでしょうか?

PS > 2 -eq "2"

この結果はTrueとなります。

ではなぜTrueとなるのでしょうか?

これはPowerShellがスカラー比較を行うためです。(スカラー比較とは2も"2"も同一視すること)

では、下記のようにキャストして比較してみたらどうなるか

PS %gt; [int]2 -eq [string]"2"
True

これも結果としては同じ値と見なされてしまい、Trueを返します。

下記のように数値型と文字列型(GetType()メソッドは型を返します)の比較はスカラー比較は適用できないため、Falseが返されます。

PS > (2).GetType() -eq "2".GetType()
False

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 21, 2008 22:39

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

型演算子を使用すると、指定した値の型を判定することができます。型演算子には次のものがあります。

演算子 説明
-is 指定された型である
-isnot 指定された型ではない

演算結果はTRUEかFALSEで返されます。

次は数値の3がint型かを判定します。

判定する型は[]で括る必要があることに注意してください。

PS > 3 -is [int]
True

次の式は数値"3"の型がstring型でないことを判定します。

PS > 3 -isnot [string]
True

 


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 21, 2008 22:37

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

置換演算子は、指定した値で元の値の一部または全体を置き換えることができます。置換演算子は下記に示すように3つあります。

演算子 説明
-replace 半角英字の大文字/小文字を区別しないで置換する。
-ireplace 半角英字の大文字/小文字を区別しないで置換する。
-creplace 半角英字の大文字/小文字を区別して置換する。

置換演算子は下記のようにして使用します

"置換対象文字列" -replace "置換したい文字(列)", "置換後の文字(列)"

下記は"Hiro"という文字列を"Hero"へ置換します

PS C:\Work> "Hiro" -replace "i","e"

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 20, 2008 23:27

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

PowerShellには「範囲演算子」と呼ばれる演算子があります。

範囲演算子とは2つのピリオド(..)で表し

範囲の開始値..範囲の終了値

のように記述します。

1..5

記述した場合は1から5までという意味になります。

下記は1から5まで繰り返し、その値を表示します。

PS > foreach ( $cnt in 1..5 )
>> {
>> Write-Host $cnt
>> }
>>
1
2
3
4
5

 


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 20, 2008 23:26

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

PowerShellにおける比較演算子には下記のものがあります。

演算子 説明
-eq, -ceq, --ieq 等しい
-ne, -cne, -ine 等しくない
-gt, -cgt, -igt より大きい
-ge, -cge, -ige 以上
-lt, -clt, -ilt より小さい
-le, -cle, -ile 以下
-like, -clike, -ilike ワイルドカードによる比較
一致したときにTrueを返す
-notlike, -cnotlike, -inotlike ワイルドカードによる比較
一致しなかったときにTrueを返す
-match, -cmatch, -imatch 正規表現による比較
一致したときにTrueを返す
-notmatch, -cnotmatch, -inotmatch 正規表現による比較
一致しなかったときにTrueを返す

比較演算子は与えられた引数を評価し、1つの出力(TrueまたはFalse)を返します。

各演算子の先頭が「-c」の場合は大文字と小文字の区別をします。また「-i」の場合は大文字と小文字の区別を行いません。これは先頭に「-c」や「-i」がつかないものと同一です。

いかにいくつか例を示します。

 

-eq演算子

この演算子は"等しい"(equal)を意味します。

この演算子の左側の値と右側の値が等しいかを比較します。


PS > 5 -eq 5
True
PS > 5 -eq 3
False
-ne演算子

この演算子は"等しくない"(not equal)を意味します。

この演算子の左側の値と右側の値が等しくないことを比較します。

等しくない場合にはTrueを返します。

PS > 5 -ne 3
True
PS > 3 -ne 3
False
-gt演算子

この演算子は"等しくない"(greater than)を意味します。

この演算子の左側の値が右側の値より大きいかを比較します。

右側の値より大きい場合にはTrueを返します。

PS > 5 -gt 3
True
PS > 3 -gt 5
False
-lt演算子

この演算子は"より小さい"(less than)を意味します。

この演算子の左側の値が右側の値より小さいかを比較します。

右側の値より小さい場合にはTrueを返します。

PS > 3 -lt 4
True
PS > 4 -lt 3
False
-like演算子

この演算子はワイルドカードによる曖昧検索を行います。

曖昧検索にヒットした場合はTrueを返します。

sample7の1つ目は"HIRO's.NET"の先頭が"HIRO"で始まっているかを検索します。

2つ目は"hi"で始まっているかを検索します。

3つめは演算子名の先頭に"c"を付加して、大文字と小文

別して検索を行うためFalseが返されています。

PS > "HIRO's,NET" -like "HIRO*"
True
PS > "HIRO's,NET" -like "hi*"
True
PS > "HIRO's,NET" -clike "hi*"
False
-match演算子

この演算子は正規表現による検索を行います。

マッチした場合はTrueを返します。

PS > "HIRO's.NET" -match "[a-z]IRO's.NET"
True

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

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

PowerShellでブール値を表すにはどうすればよいでしょうか?

変数 $a に trueを直接代入しようとすると次のようになります。

PS > $a = true
用語 'true' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルとし
て認識されません。用語を確認し、再試行してください。
発生場所 行:1 文字:9
+ $a = true <<<<

true はブール値として認識しません。

実は、PowerShellではブール値を先頭に$を付けて $TRUEや$FALSE と表します。

PS > $a = $TRUE
PS > $a.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Boolean                                  System.ValueType

Null値も同様に、先頭に$を付けて $NULL と表します

PS > $a = $NULL
PS > $a.GetType()
null 値の式ではメソッドを呼び出せません。
発生場所 行:1 文字:11
+ $a.GetType( <<<< )

エラーが発生していますがこれは正常な処理です。

変数の値がNullなのでGetType()メソッドを実行できずにエラーとなっているからです。


Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 14, 2008 22:15

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

論理演算子は与えられた式を評価し1つの出力(TRUE or FALSE)を返します。

下記はPowerShellで使用可能な論理演算子です。

演算子 説明
-and 論理積
-or 論理和
-xor 排他的論理和
-not 論理否定
-band ビットごとの論理積
-bor ビットごとの論理和
-bxor ビットごとの排他的論理和
-bnot ビットごとの否定

いくつか例を示したいと思います。

-and 演算子

-and 演算子は、2 つの引数を評価し、両方の引数が真であるときのみ、True を返します。

たとえば

$a = (2 -gt 1) -and (5 -gt 2)

これは

「2は1より大きい且つ5は2より大きい」を$aに代入します。

この式は満たされるのでTrueとなります。

PS > $a = (2 -gt 1) -and (5 -gt 2)
PS > $a
True
-or 演算子

-or 演算子は、2 つの引数を評価し、どちらか一方または両方の引数が真であるときに、True を返します。

たとえば

$a = (2 -gt 1) -or (5 -gt 2)

これは

「2は1より大きい または 5は2より大きい」を$aに代入します。

この式は満たされるのでTrueとなります。

 

$a = (1 -gt 2) -or ( 2 -gt 5)

「1は2より大きい または 5は2より大きい」を$aに代入します。

この式は両方とも満たされないのでFalseとなります

PS > $a = (2 -gt 1) -or (5 -gt 2)
PS > $a
True
PS > $a = (1 -gt 2) -or (2 -gt 5)
PS > $a
False
-not演算子

-not演算子は、式が偽かどうかを評価します。つまり式がTrue の場合はFalseを、式がFalseの場合にはTrueを返します。

たとえば

$a = -not (2 -gt 1)

これは

2は1より大きい」の式が偽であるかを評価し$aに代入します。

の式は満たされる(真)のでFalseが代入されます。

PS > $a = -not (2 -gt 1)
PS > $a
False

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
入海 posted on 8月 14, 2008 05:13

この記事は以前にdevslife.comに掲載したものです。

 

ある日「PowerShellで独自の結果を返すにはどうすればいいのだろう?」と考えていた。もちろんカスタムコマンドレットを作成すればアセンブリ内でクラスを作ってそれをWriteObjectを使って返してやればいいのだろうけど、スクリプト内でできないものだろうか?と疑問に思った。

そこでPSObjectの登場だ。PSObjectはSystem.Management.Automation名前空間に存在し、いわば.NET FrameworkのSystem.Objectと同じような位置づけである。非常に汎用的なオブジェクトなのだ。PSObjectをインスタンス化してそのメンバーを見てみると・・・

PSObject

それだけでは使えるものがほとんどない。このオブジェクトにプロパティやメソッドを追加して使えるものにしていこうという魂胆である。

すでにメモリ内に存在するオブジェクトにプロパティやメソッドを追加することは.NETプログラミングではあまり頻繁に行われることではないが、 JavaScriptだとPrototypeとして、.NET Frameworkで言うならばSystem.Reflection.Emitの名前空間に存在するクラスを使って動的にクラス、プロパティ、メソッド、そして最終的にはアセンブリまで作れてしまうのがある。PowerShellで動的にメンバーを追加するにはAdd-Memberというコマンドレットを使用する。ためしに上でインスタンス化したPSObjectにCustomerIDというプロパティを追加してみよう。

image

すると・・・

image

一つのインスタンスのPSObjectでは複数の結果を返すことができない。そこでArrayListを使ってみよう。

$Result = New-Object System.Collections.ArrayList 
 
foreach ($i in 1..15)
{
    $Cust = New-Object PSObject
    $Cust | Add-Member -Name "CustomerID" -MemberType NoteProperty -Value $i
    [void] $Result.Add($Cust)
} 
 
$Result | ft -AutoSize

上のスクリプトを.ps1ファイルに保存して実行すると・・・

結果

上の例にはもちろん複数のプロパティを追加すると複数の列の結果が得られる。この結果をパイプを使って次のコマンドレットに渡すことも可能だ。

今回は触れないが-memberTypeにはNotePropertyの他にAliasProperty, CodeProperty, Property, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Allがある。help Add-Member -detailedで詳細を読んでみてほしい。


Posted in: PowerShell  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
HIRO posted on 8月 12, 2008 22:02

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

代入演算子とは、文字通り変数に値を代入するための演算子です。

PowerShellで使用可能な代入演算子には下記のものがあります。

演算子 説明
= 指定した値を変数に設定します。
+= 指定した値を変数の値に加算するか、指定した値を既存の値に追加します。
-= 指定した値を変数の値から減算します。
*= 指定した値で変数の値を乗算するか、指定した値を既存の値に追加します。
/= 指定した値で変数の値を除算します。
%= 指定した値で変数の値を除算し、余りを変数に代入します。
= 代入演算子

単一の値を代入するには

変数名(先頭が$で始まる) = 値

という書式で行います。

次の例では、$aに数値、$bに文字列(値を2重引用符で囲む)、$cに文字列の配列(カンマで区切ることで配列となる)代入しています

PS C:\Users\HIRO> $a = 3
PS C:\Users\HIRO> $a
3
PS C:\Users\HIRO> $b = "HIRO"
PS C:\Users\HIRO> $b
HIRO
PS C:\Users\HIRO> $c = "VB.NET", "C#", "PowerShell"
PS C:\Users\HIRO> $c
VB.NET
C#
PowerShell
+= 代入演算子

+=代入演算子は、変数の値を増加(インクリメント)または追加します。

$a += 3 と記述した場合、この式は $a = $a + 3 と同等です。

$a に 2が代入されている場合は、この式の結果は 5となります。

PS C:\Users\HIRO> $a = 2
PS C:\Users\HIRO> $a += 3
PS C:\Users\HIRO> $a
5
PS C:\Users\HIRO> $b = "Hel"
PS C:\Users\HIRO> $b += "lo"
PS C:\Users\HIRO> $b
Hello
-= 代入演算子

-=代入演算子は、変数の値を減少(デクリメント)します。

この演算子は文字列には使用することができないことに注意してください。

$a -= 3 と記述した場合、この式は $a = $a - 3 と同等です。

$a に 5が代入されている場合は、この式の結果は 2となります。

PS C:\Users\HIROKI> $a = 5
PS C:\Users\HIROKI> $a -= 3
PS C:\Users\HIROKI> $a
2
*= 代入演算子

*=代入演算子は、演算子の右側に記述した値で乗算を行います。

$a *= 3 と記述した場合、この式は $a = $a * 3 と同等です。

$a に 5が代入されている場合は、この式の結果は 15となります。

文字列の場合には、演算子の右側に記述した値の文だけ文字列が繰り返されます。

PS C:\Users\HIRO> $a = 5
PS C:\Users\HIRO> $a *= 3
PS C:\Users\HIRO> $a
15
PS C:\Users\HIRO> $b = "Hello"
PS C:\Users\HIRO> $b *= 3
PS C:\Users\HIRO> $b
HelloHelloHello
/= 代入演算子

/=代入演算子は、演算子の右側に記述した値で除算を行います。

この演算子は文字列には使用することができないことに注意してください。

$a /= 3 と記述した場合、この式は $a = $a / 3 と同等です。

$a に 6が代入されている場合は、この式の結果は 2となります。

PS C:\Users\HIRO> $a = 6
PS C:\Users\HIRO> $a /= 3
PS C:\Users\HIRO> $a
2
%= 代入演算子

/=代入演算子は、演算子の右側に記述した値で除算を行い、余りを代入します。

この演算子は文字列には使用することができないことに注意してください。

$a %= 3 と記述した場合、この式は $a = $a % 3 と同等です。

$a に 7が代入されている場合は、この式の結果は 1となります。

PS C:\Users\HIRO> $a = 7
PS C:\Users\HIRO> $a %= 3
PS C:\Users\HIRO> $a
1

Posted in: PowerShell , PowerShell入門  Tags:

最新のブログ

  • 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!!