🕵
[PowerShell]変数のデータ型を簡単に確認できるFunction
概要
PowerShellのコマンドを直接実行する際、データ型の扱い方を間違えてもコマンドを打ちなおせば良いので、
データ型を意識することはありませんでした。
ただ、PowerShellスクリプトを作成する際は想定した動きになるように、データ型を意識してコーディングする必要があります。
PowerShell で変数のデータ型を確認する方法は、「 "変数名".GetType.FullName
」というメソッドを指定で実現可能ですが、
少し長いコマンドとなる為、繰り返し実行する事が面倒に感じていました。
そこで今回は、より簡単にデータ型が確認できる自作のFunction「Get-Datatype」を作成してみました。
この記事のターゲット
- PowerShell ユーザーの方
- 変数のデータ型を簡単に確認したい方
データ型を確認する自作Function「Get-Datatype」
実行方法は、「 Get-Datatype "対象の変数"
」とすると、下記の2つの項目が確認できます。
- 項目1:BaseType
"変数名".GetType()
で確認できるベース(親)のデータ型を表示 - 項目2:Type
"変数名".GetType().FullName
で確認できる変数のデータ型を表示
データ型を調べる「Get-Datatype」Function
Function Get-Datatype {
Param (
[Parameter(Mandatory=$true)]$variable
)
# 文字列配列を宣言
[System.String[]]$rowdata = @(
$variable.GetType().BaseType.FullName, # 変数のベースタイプ
$variable.GetType().FullName # 変数のデータ型
)
# PSCustomObjectで項目名を設定
$types_table = [PSCustomObject]@{
BaseType = $rowdata[0]
DataType = $rowdata[1]
}
# コンソールで表示
$types_table | Format-Table -Property BaseType, DataType -AutoSize -Wrap
}
いろいろなケースで自作Functionを検証
文字列 の場合
文字列 の場合
PS C:\Users\"ユーザー名"> [System.String]$str = '$str is String.'
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $str
BaseType Type
-------- ----
System.Object System.String
PS C:\Users\"ユーザー名">
数値 の場合
数値 の場合
PS C:\Users\"ユーザー名"> $int = 999999999999999999
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $int
BaseType Type
-------- ----
System.ValueType System.Int64
PS C:\Users\"ユーザー名">
文字列 + 配列 の場合
文字列 + 配列 の場合
PS C:\Users\"ユーザー名"> [System.String[]]$str_array = @('text1', 'text2', 'text3')
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $str_array
BaseType Type
-------- ----
System.Array System.String[]
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $str_array[0]
BaseType Type
-------- ----
System.Object System.String
PS C:\Users\"ユーザー名">
オブジェクト + 配列 の場合
オブジェクト + 配列 の場合
PS C:\Users\"ユーザー名"> [System.Object[]]$obj_array = @(999, 'text2')
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $obj_array
BaseType Type
-------- ----
System.Array System.Object[]
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $obj_array[0]
BaseType Type
-------- ----
System.ValueType System.Int32
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Datatype $obj_array[1]
BaseType Type
-------- ----
System.Object System.String
PS C:\Users\"ユーザー名">
補足情報:自作したFunctionをPowerShellのプロファイルに定義すると便利
自作したFunctionをあらかじめPowerShellのプロファイルに登録することで、簡単に自作Functionを呼び出せるようになります。
プロファイルの登録方法については、こちらの記事内に「参考情報:powershellのプロファイルを使ったプロセス環境変数の設定方法」として紹介しています。
必要に応じて、今回の紹介している自作Functionを登録(定義)してください。
参考情報
-
System.Management.Automation.PSCustomObject(about_PSCustomObject)
-
こちらの記事(PowerShellでLinuxのwhichコマンドを作る)にインスパイアされて、この記事を作成しました。
まとめ
- PowerShellで、より簡単に変数のデータ型を確認できる自作Function「Get-Datatype」を作成
- 自作したFunctionは、プロファイルのPowerShellスクリプトに定義すると簡単に呼び出せる
前述した参考情報を参照。 - 新規環境で実施したい場合、プロファイル登録 と 自作Functionの定義 の2つを対応する必要があり少し面倒かも
自作したFunctionを半自動でプロファイルに登録してくれるPowerShellスクリプトを作成すると便利かも。
➡ 2024.4.4更新:こちらの記事で作成してみました。
関連記事
Discussion