Powershellでコマンドライン引数をtxtファイルで渡す。

コンピュータ
PowerShellのあれこれ

Powershellの.ps1スクリプトでコマンドライン引数を.txtファイルに分離してiniファイルみたいな事をさせたい。

スクリプト

<#
.SYNOPSIS
 コマンドライン引数をtxtファイルで渡す
#>

using namespace System.IO

param(
    [string]$Path
)

Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"

function usage()
{
    Write-Host ("{0}の使い方" -f (Split-Path -Leaf $PSCommandPath))

    exit
}


# 引数があるか?
if ($Path -eq "") 
{
    $fileName = ([Path]::GetFileNameWithoutExtension($PSCommandPath) + ".txt")
    $txtPath = Join-Path $PSScriptRoot $fileName

    if (Test-Path -LiteralPath $txtPath)
    {
        Get-Content -LiteralPath $txtPath | Invoke-Expression
    } else {
        usage
    }
}

Write-Host ("引数のPathは{0}" -f $Path)

テキストファイル

$Path = "hoge"

スクリプトと同じディレクトリにスクリプト名+拡張子を.txtで保存

結果

# 引数無し(txt無し)
PS>.\argv_ini.ps1
argv_ini.ps1の使い方

# 引数無し(txt有り)
PS>.\argv_ini.ps1
引数のPathはhoge

# 引数有り
PS>.\argv_ini.ps1 a
引数のPathはa

説明

.txtファイルを読み込んでInvoke-Expressionで実行しているだけです。
.txtファイルの中身はpowershellの文法で記述してください。

コメント