型とは
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] | 0 | 255 |
[char] | [System.Char] | - | - |
[datetime] | [System.DateTime] | 0001/01/01 0:00:00 | 9999/12/31 23:59:59 |
[decimal] | [System.Decimal] | -79228162514264337593543950335 | 79228162514264337593543950335 |
[double] | [System.Double] | -1.79769313486232E+308 | 1.79769313486232E+308 |
[guid] | [System.Guid] | - | - |
[hashtable] | [System.Collections.Hashtable] | - | - |
[int16] | [System.Int16] | -32768 | 32767 |
[int32][int] | [System.Int32] | -2147483648 | 2147483647 |
[int64][long] | [System.Int64] | -9223372036854775808 | 9223372036854775807 |
[nullable] | [System.Nullable] | - | - |
[psobject] | [System.Management.Automation.PSObject] | - | - |
[regex] | [System.Text.RegularExpressions.Regex] | - | - |
[sbyte] | [System.SByte] | -128 | 127 |
[scriptblock] | [System.Management.Automation.ScriptBlock] | - | - |
[single][float] | [System.Single] | -3.402823E+38 | 3.402823E+38 |
[string] | [System.String] | - | - |
[switch] | [System.Management.Automation.SwitchParameter] | - | - |
[timespan] | [System.TimeSpan] | -10675199.02:48:05.4775808 | 10675199.02:48:05.4775807 |
[type] | [System.Type] | - | - |
[uint16] | [System.UInt16] | 0 | 65535 |
[uint32] | [System.UInt32] | 0 | 4294967295 |
[uint64] | [System.UInt64] | 0 | 18446744073709551615 |
[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