PowerShell(パワーシェル)スクリプトをコマンドプロンプトやバッチファイルから実行する方法についてまとめました。
ここでは外部のPowerShellファイルを呼び出す方法とバッチファイルに直接コマンドを記述する方法についてご紹介します。
PowerShellファイルを呼び出す方法
この方法では、別途PowerShellファイルを用意して、それを呼び出すことでPowerShellスクリプトを実行します。
powershell -File test.ps1
相対パスでpsファイルを指定する場合は以下
powershell -File .\tmp\test.ps1
絶対パスでpsファイルを指定する場合は以下
powershell -File C:\tmp\test.ps1
PowerShellスクリプトに引数を渡す
powershell -File C:\tmp\test.ps1 10 "あいうえお" 123
コマンドを直接実行する方法
上記の「PowerShellファイルを呼び出す方法」ではバッチファイルとPowerShellファイル2つのファイルが必要で、少し使いにくいので1つのバッチファイルにまとめたいと思われる人は多いかと思います。
その場合、以下のように記述することで、外部ファイルを指定するのではなく、コマンドを直接実行することが可能です。
powershell -Command "Write-Host Hello World!;"
バッチファイルでPowerShellスクリプトに引数を渡したい場合は、事前に宣言した環境変数をコマンドの中に埋め込むことで同様の処理ができるのでおすすめです。
set Arg1=1234 set Arg2=あいうえお powershell -Command "Write-Host %Arg1%;Write-Host %Arg2%;"
コマンドの中で「”」(ダブルクォーテーション)を使いたい場合、以下のようにエスケープ文字を使うことで使用可能です。
powershell -Command "$A = \"1行目\";$B = \"2行目\";$Message = $A + \"`n\" + $B";Write-Host $Message;"
上記は、変数Aと変数Bに文字列を設定する際に“1行目”ではなく\”1行目\”のように記述することで、powershellコマンドのCommandオプション内でも「”」(ダブルクォーテーション)が使えるようにしています。
powershellコマンドについて
Powershellコマンドの詳細は公式サイトを確認するか、ヘルプをご確認ください。
ヘルプは以下のコマンドを実行することで参照できます。
powershell -Help
ヘルプコマンドの出力
PowerShell[.exe] [-PSConsoleFile <ファイル> | -Version <バージョン>] [-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive] [-InputFormat {Text | XML}] [-OutputFormat {Text | XML}] [-WindowStyle <スタイル>] [-EncodedCommand <Base64 エンコードのコマンド>] [-ConfigurationName <文字列>] [-File <ファイル パス> <引数>] [-ExecutionPolicy <実行ポリシー>] [-Command { - | <スクリプト ブロック> [-args <引数の配列>] | <文字列> [<コマンド パラメーター>] } ] PowerShell[.exe] -Help | -? | /? -PSConsoleFile 指定された Windows PowerShell コンソール ファイルを読み込みます。コンソー ル ファイルの作成には、Windows PowerShell の Export-Console を使用します。 -Version 指定されたバージョンの Windows PowerShell を起動します。 このパラメーターでバージョン番号 ("-version 2.0" など) を入力します。 -NoLogo スタートアップ時に著作権の見出しを非表示にします。 -NoExit スタートアップ コマンドを実行後、終了しません。 -Sta シングルスレッド アパートメントを使用して、シェルを起動します。 既定ではシングルスレッド アパートメント (STA) です。 -Mta マルチスレッド アパートメントを使用して、シェルを起動します。 -NoProfile Windows PowerShell プロファイルを読み込みません。 -NonInteractive ユーザーに対話的なプロンプトを表示しません。 -InputFormat Windows PowerShell に送られたデータの形式を指定します。有効な値は、"Text" (テキスト文字列) または "XML" (シリアル化 CLIXML 形式) です。 -OutputFormat Windows PowerShell からの出力の形式を決定します。有効な値は、"Text" (テ キスト文字列) または "XML" (シリアル化 CLIXML 形式) です。 -WindowStyle ウィンドウ スタイルを Normal、Minimized、Maximized、または Hidden に設定します。 -EncodedCommand Base-64 エンコードの文字列のコマンドを受け付けます。複雑な引用符や中かっ こが必要なコマンドを Windows PowerShell に送るには、このパラメーターを使 用します。 -ConfigurationName Windows PowerShell が実行される構成エンドポイントを指定します。 ローカル コンピューターに登録された任意のエンドポイントを指定できます。 たとえば、既定の Windows PowerShell リモート処理エンドポイントや、特定の ユーザー機能を持つカスタム エンドポイントなどを指定できます。 -File 指定されたスクリプトをローカル スコープ ("ドット ソース") で実行して、 スクリプトによって作成された関数と変数を現在のセッションで使用できるように します。スクリプト ファイルのパスとパラメーターを入力します。 File はコマンド内で最後のパラメーターである必要があります。File パラメーター 名の後に入力された文字は、スクリプト ファイルのパスとスクリプトのパラメー ターとして解釈されるためです。 -ExecutionPolicy 現在のセッションの既定の実行ポリシーを設定し、 $env:PSExecutionPolicyPreference 環境変数に保存します。 このパラメーターでは、レジストリに設定されている Windows PowerShell 実行 ポリシーは変更されません。 -Command PowerShell のコマンド プロンプトに入力された場合と同様に、指定されたコマ ンド (および任意のパラメーター) を実行します。NoExit が指定されていない場 合は、そのまま終了します。Command の値には、"-"、文字列、またはスクリプト ブロックを指定できます。 Command の値が "-" の場合、コマンド テキストは標準入力から読み込まれます。 Command の値がスクリプト ブロックの場合は、スクリプト ブロックを中かっこ ({}) で囲む必要があります。スクリプト ブロックを指定できるのは、Windows PowerShell で PowerShell.exe を実行している場合だけです。スクリプト ブロ ックの結果は、ライブ オブジェクトではなく逆シリアル化 XML オブジェクトと して親シェルに返されます。 Command の値が文字列の場合、Command はコマンド内で最後のパラメーターである 必要があります。コマンドの後に入力された文字は、コマンド引数として解釈さ れるためです。 Windows PowerShell コマンドを実行する文字列を記述するには、次の形式を使用します。 "& {<コマンド>}" 引用符によりこれが文字列であることを示し、呼び出し演算子 (&) によりコマ ンドが実行されます。 -Help, -?, /? このメッセージを表示します。Windows PowerShell で PowerShell.exe のコマン ドを入力する場合、コマンド パラメーターの前にスラッシュ (/) ではなくハイ フン (-) を入力してください。Cmd.exe では、ハイフンまたはスラッシュのいずれかを使用できます。 例 PowerShell -PSConsoleFile SqlSnapIn.Psc1 PowerShell -version 2.0 -NoLogo -InputFormat text -OutputFormat XML PowerShell -ConfigurationName AdminRoles PowerShell -Command {Get-EventLog -LogName security} PowerShell -Command "& {Get-EventLog -LogName security}" # -EncodedCommand パラメーターを使用する場合: $command = 'dir "c:\program files" ' $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -encodedCommand $encodedCommand
コメント
[…] […]
[…] […]