PowerShellで扱える型について
スポンサーリンク

型とは

PowerShellの変数や値において、全て型と呼ばれる種別に区分けされています。
例えば「Sample1.ps1」の様に、単純な値を変数に格納した際、それに対応した型で格納されます。

<# Sample1.ps1 #>
# 数字を変数に直接代入
$TEST1 = 1

# 文字列を変数に直接代入
$TEST2 = "TEST"

# 配列を変数に直接代入
$TEST3 = @( 1, 2 ,3 )

# 型の確認
$TEST1.GetType()
$TEST2.GetType()
$TEST3.GetType()
PS C:SampleSource> .Sample1.ps1

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType
True     True     String                                   System.Object
True     True     Object[]                                 System.Array

PowerShellでは変数に適当に格納しても変数をそのまま使用することができます。
しかし、型の管理が疎かになりますので可能な限り意図した型で扱われているか確認した方が良いでしょう。

変数の型の指定方法

「Sample1.ps1」では値をそのまま格納しましたが、例えば文字列(String型)の数字が欲しいとなった時にこれでは困ってしまいます。
そのため「Sample2.ps1」の方法を使用して、型を指定しながら変数に値を格納する事が可能です。

<# Sample2.ps1 #>
# 数字を変数に直接代入
[string]$TEST1 = 1

# 文字列を変数に直接代入
[string]$TEST2 = "TEST"

# 型の確認
$TEST1.GetType()
$TEST2.GetType()
PS C:SampleSource> .Sample2.ps1

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
True     True     String                                   System.Object
スポンサーリンク

PowerShellで扱える型の一覧

PowerShellで扱える型は、以下の一覧の通り。

名前最小値最大値
[array][System.Array]--
[bool][System.Boolean]--
[byte][System.Byte]0255
[char][System.Char]--
[datetime][System.DateTime]0001/01/01 0:00:009999/12/31 23:59:59
[decimal][System.Decimal]-7922816251426433759354395033579228162514264337593543950335
[double][System.Double]-1.79769313486232E+3081.79769313486232E+308
[guid][System.Guid]--
[hashtable][System.Collections.Hashtable]--
[int16][System.Int16]-3276832767
[int32][int][System.Int32]-21474836482147483647
[int64][long][System.Int64]-92233720368547758089223372036854775807
[nullable][System.Nullable]--
[psobject][System.Management.Automation.PSObject]--
[regex][System.Text.RegularExpressions.Regex]--
[sbyte][System.SByte]-128127
[scriptblock][System.Management.Automation.ScriptBlock]--
[single][float][System.Single]-3.402823E+383.402823E+38
[string][System.String]--
[switch][System.Management.Automation.SwitchParameter]--
[timespan][System.TimeSpan]-10675199.02:48:05.477580810675199.02:48:05.4775807
[type][System.Type]--
[uint16][System.UInt16]065535
[uint32][System.UInt32]04294967295
[uint64][System.UInt64]018446744073709551615
[xml][System.Xml.XmlDocument]--

私が調べた限りではこれらだけでしたが、これら以外にも扱える型が存在するみたいです。
(PSCustomObjectはObject型で良いのかな?)

型の確認方法

先のサンプルでも使用されていますが、変数の型を確認する際には変数の後ろに「GetType()」を指定することで確認する事ができます。

PS C:> ("TEST").GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

PS C:> (1).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

PS C:> (Get-Date).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DateTime                                 System.ValueType
スポンサーリンク

Twitterでフォローしよう