[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】テキストファイルをコードとして実行する



更新日:2021/05/07


Windows Powershell 環境において、テキストファイルをPowershell スクリプトとして実行したい場合もあると思います。
このページでは、例えばメモ帳などで編集できるテキストファイルにPowershellコードを記載し、他のPowershell スクリプトから実行する方法を紹介します。


サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。


以下のコマンドではc:\temp\test.txt を Powershell のファイルとして実行します。

get-content コマンドレットでテキストファイルの中身を出力しています。その後 Invoke-Expression でこのプログラムを実行しています。

get-content は gc と略することも可能です。

c:\temp\test.txt には以下が記載されています。
===================================================
write-host "test"
gc c:\temp\test.txt

===================================================


(注意)
プログラムは複数行にまたがる場合はこのままでは正常に実行できません。
例えば以下のようなプログラムはinvoke-expression の alias である cat を実行します。cat -rawで実行可能です。


サンプルコード:


get-content "c:\temp\test.txt" | Invoke-Expression



実行結果:

test
# sample program #
write-host "test"
gc c:\temp\test.txt






複数行(multiple line) のプログラムを実行するには、cat -raw で実行します。cat はget-content の alias です。




サンプルコード:

cat -raw "c:\temp\test.txt" | Invoke-Expression

#あるいは
Invoke-Expression (get-contents -raw "c:\temp\test.txt")


実行結果:

1 is 1




もし cat -raw ではなく get-content を使用した場合は次のエラーとなってしまいます。


サンプルコード:

get-content "c:\temp\test.txt" | Invoke-Expression


実行結果:

Invoke-Expression : 引数が空の文字列であるため、パラメーター 'Command' にバインドできません。
発生場所 C:\temp\code.ps1:1 文字:34
+ get-content "c:\temp\test.txt" | Invoke-Expression
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:PSObject) [Invoke-Expression]、ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.Invo
keExpressionCommand

Invoke-Expression : 発生場所 行:1 文字:12
+ if($x -eq 1)
+ ~
if ( 条件 ) の後にステートメント ブロックが存在しません。
発生場所 C:\temp\code.ps1:1 文字:34
+ get-content "c:\temp\test.txt" | Invoke-Expression
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Invoke-Expression], ParseException
+ FullyQualifiedErrorId : MissingStatementBlock,Microsoft.PowerShell.Commands.InvokeExpressionCommand





上記の場合でもうまく行かない場合があります。そのような場合は以下のコマンドを試してみてください。 & では後ろの式を評価しています。


サンプルコード:


$codefile=gc -raw "c:\temp\test.txt"
$SB=[System.Management.Automation.ScriptBlock]::Create($codefile)

& $SB

実行結果:

1 is 1









[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018