LoginSignup
0
3

More than 5 years have passed since last update.

PowerShellで設定ファイルの内容をコンソールとファイルに出力するようにしてみた

Posted at

スクリプトを実行する際に設定ファイルの内容をコンソールで確認出来るようにしたらミスも防げるしいいかなーと思って考えてみた.
ついでにtsvで出力出来るようにした.

スクリプト

設定ファイルはこんな感じ.
PowerShellでは-Option Constantで定数を宣言できる.
変数の内容は-Descriptionで書く.

Get-Variableで変数の一覧を取得出来るがいらないものまで色々出てきてしまう(気になる人は手元でお試しあれ).
そこで-Descriptionの先頭にタグを付けることでユーザー定義の変数かそうでないかを判別するようにした.

あとはFormat-Tableでコンソールに表示して, Export-Csvでファイル出力すれば出来上がり.

Config.ps1
# タグ
Set-Variable -Name UserDefinedVarTag -Value "UserDefinedVars:" -Option Constant
# サンプルフラグ
Set-Variable -Name IsSample -Value $true -Option Constant -Description ("{0}サンプルフラグ" -f $UserDefinedVarTag)
# スクリプトのパス
Set-Variable -Name ConfRoot -Value (Split-Path $MyInvocation.MyCommand.Path -Parent) -Option Constant -Description ("{0}スクリプトのパス" -f $UserDefinedVarTag)
# サンプルディレクトリ
Set-Variable -Name SampleDir -Value ("{0}\Sample" -f $ConfRoot) -Option Constant -Description ("{0}サンプルディレクトリ" -f $UserDefinedVarTag)
# ユーザー名
Set-Variable -Name UserName -Value "TestUser" -Option Constant -Description ("{0}ユーザー名" -f $UserDefinedVarTag)
# ユーザーパスワード
Set-Variable -Name UserPassword -Value "PaSsWoRd" -Option Constant -Description ("{0}パスワード" -f $UserDefinedVarTag)
# 設定ファイルの出力パス
Set-Variable -Name ConfFilePath -Value ("{0}\Config.tsv" -f $ConfRoot) -Option Constant -Description ("{0}設定ファイル内容出力先" -f $UserDefinedVarTag)

function Write-Config(){
    <#
    .SYNOPSIS
    設定内容をコンソールに出力します.
    #>

    $vars = @()
    Get-Variable | ForEach-Object{ if($_.Description -ne $null -and $_.Description.Contains($UserDefinedVarTag)) { $vars += $_ } }
    $vars | ForEach-Object{ $_.Description = $_.Description.Split(":")[1] }
    $vars | Select-Object -Property @{n="変数名"; e={$_.Name}}, @{n="値"; e={$_.Value}}, @{n="詳細"; e={$_.Description}} | Format-Table
    $vars | Select-Object -Property  @{n="変数名"; e={$_.Name}}, @{n="値"; e={$_.Value}}, @{n="詳細"; e={$_.Description}} | Export-Csv -Delimiter "`t" -Encoding default -Path $ConfFilePath -NoTypeInformation
}

設定ファイルを読み込んだスクリプトで関数を呼び出す.

Write-Config.ps1
set-variable -name ScriptRoot -value (Split-Path $MyInvocation.MyCommand.Path -Parent) -option Constant

# 設定ファイル読み込み
. ("{0}\Config.ps1" -f $ScriptRoot)

Write-Config

実行してみるとコンソールに設定内容がきれいに表示される.

PS D:\Sample> .\Write-Config.ps1

変数名                                                    詳細
------       --                                             ----
ConfFilePath D:\Common\PowerShell\Modules\Sample\Config.tsv 設定ファイル内容出力先
ConfRoot     D:\Common\PowerShell\Modules\Sample            スクリプトのパス
IsSample     True                                           サンプルフラグ
SampleDir    D:\Common\PowerShell\Modules\Sample\Sample     サンプルディレクトリ
UserName     TestUser                                       ユーザー名
UserPassword PaSsWoRd                                       パスワード

ファイルにも出力される.

"変数名" "値"   "詳細"
"ConfFilePath"  "D:\Common\PowerShell\Modules\Sample\Config.tsv"    "設定ファイル内容出力先"
"ConfRoot"  "D:\Common\PowerShell\Modules\Sample"   "スクリプトのパス"
"IsSample"  "True"  "サンプルフラグ"
"SampleDir" "D:\Common\PowerShell\Modules\Sample\Sample"    "サンプルディレクトリ"
"UserName"  "TestUser"  "ユーザー名"
"UserPassword"  "PaSsWoRd"  "パスワード"
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3