🕵

[PowerShell]変数のデータ型を簡単に確認できるFunction

2024/04/04に公開

概要

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を登録(定義)してください。

参考情報

まとめ

  • PowerShellで、より簡単に変数のデータ型を確認できる自作Function「Get-Datatype」を作成
  • 自作したFunctionは、プロファイルのPowerShellスクリプトに定義すると簡単に呼び出せる
    前述した参考情報を参照。
  • 新規環境で実施したい場合、プロファイル登録 と 自作Functionの定義 の2つを対応する必要があり少し面倒かも
    自作したFunctionを半自動でプロファイルに登録してくれるPowerShellスクリプトを作成すると便利かも。
    ➡ 2024.4.4更新:こちらの記事で作成してみました。

関連記事

https://zenn.dev/haretokidoki/articles/4da393f1f8d49d
https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion