20

自動スクリプトとして使用したい数行の PowerShell コードがあります。動作できるようにしたい方法は、次のオプションのいずれかを使用して呼び出すことができるようにすることです。

  1. PowerShell を開いてスクリプトを実行し、PowerShell を閉じる 1 つのコマンド ライン (これは、グローバル ビルド ルーチンに使用されます)
  2. ダブルクリックして上記を実行できるファイル (ビルド プロセスのコンポーネントを手動でテストするときに、この方法を使用します)

PowerShell のドキュメントをオンラインで調べたところ、多くのスクリプトを見つけることができましたが、必要なことを実行する方法に関する指示を見つけることができませんでした。助けてくれてありがとう。

4

5 に答える 5

19

http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspxから

少しの CMD で美しい PowerShell スクリプトを汚したい場合は、PowerShell-CMD ポリグロット トリックを使用できます。PowerShell スクリプトを .CMD ファイルとして保存し、次の行を先頭に追加します。

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0' ) -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

引用符付きの引数をサポートする必要がある場合は、より長いバージョンがあり、コメントも使用できます。(2 つの @ の珍しい CMD コメント トリックに注意してください)。

@@:: このプロローグにより、PowerShell スクリプトを .CMD ファイルに埋め込むことができます。
@@:: PowerShell 以外のコンテンツの前には "@@" を付ける必要があります
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content ' %~f0') -notmatch '^^@@'))) & goto :EOF
于 2011-12-21T23:40:37.657 に答える
9

スクリプトを .ps1 ファイルとして保存し、次のように powershell.exe を使用して起動します。

powershell.exe .\foo.ps1

スクリプトへのフル パスを指定していることを確認し、署名されていないローカル スクリプトを実行できるように、実行ポリシー レベルを少なくとも「RemoteSigned」に設定していることを確認してください。

于 2008-08-27T07:06:22.393 に答える
4

スクリプトを別のスクリプトから自動的に実行 (例: バッチ ファイル)

Matt Hamilton が提案したように、単純に PowerShell .ps1 スクリプトを作成し、次を使用して呼び出します。

PowerShell C:\Path\To\YourPowerShellScript.ps1

または、バッチ ファイルの作業ディレクトリが PowerShell スクリプトと同じディレクトリである場合は、相対パスを使用できます。

PowerShell .\YourPowerShellScript.ps1

これが機能する前に、PC の実行ポリシーを設定する必要があります。その方法を以下に示します。


スクリプトを手動で実行する方法 1

詳細については、私のブログ投稿を参照してください。ただし、基本的には、PowerShell .ps1 スクリプト ファイルを作成して目的の処理を実行し、同じディレクトリに .cmd バッチ ファイルを作成して、ファイルの内容に次を使用します。

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

3 行目のMyPowerShellScript.ps1を PowerShell スクリプトのファイル名に置き換えます。

これにより、バッチ ファイルをダブルクリックするだけで PowerShell スクリプトを実行できるようになり、PowerShell 実行ポリシーを変更する必要がなくなります。

私のブログ投稿では、PowerShell スクリプトを管理者として実行する必要がある場合に、それを実行する方法も示しています。


スクリプトを手動で実行する方法 2

または、PowerShell スクリプトごとにバッチ ファイルを作成したくない場合は、PowerShell スクリプトの既定の動作を [編集] から [実行] に変更して、.ps1 ファイルをダブルクリックして実行することができます。

ファイル パスにスペースが含まれるスクリプトを実行できるように、追加のレジストリ設定を変更する必要があります。このブログ投稿で、これらの両方を行う方法を示します。

ただし、この方法では、最初にスクリプトの実行を許可する実行ポリシーを設定する必要があります。これを行う必要があるのは PC ごとに 1 回だけで、PowerShell コマンド プロンプトでこの行を実行することで実行できます。

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Forceは、実行ポリシーを実際に変更するコマンドです。これによりRemoteSignedに設定されるため、必要に応じて別のものに変更できます。また、この行は PowerShell を管理者として自動的に実行します。これは、実行ポリシーを変更するために必要です。

于 2013-11-18T23:53:13.327 に答える
3

マットの回答のソース。

以下を含むバッチファイルを作成することにより、ファイルをダブルクリックして実行できます。

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File
于 2008-08-27T07:35:06.863 に答える
0

このコマンドを使用できます:powershell.exe -argument c:\scriptPath\Script.ps1

于 2016-11-15T13:48:52.427 に答える