web-dev-qa-db-ja.com

CMDでPowerShellを実行する方法

Cmdコマンドライン内でPowerShellスクリプトを実行しようとしています。誰かが私に例を挙げて、それはうまくいきました:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

しかし問題は、PowerShellスクリプトに入力パラメーターがあるため、試してみましたが、機能しません。

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' "

エラーは次のとおりです。

「D:\ Work\SQLExecutor.ps1 -gettedServerName "MY-PC"」という用語は、コマンドレット、関数、

この問題を修正するにはどうすればよいですか?

41
XiaoYao

引数をファイルパスから分離する必要があります。

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 ' -gettedServerName 'MY-PC'"

Fileパラメーターと位置パラメーターを使用して構文を簡単にする別のオプション:

powershell.exe -noexit -file "D:\Work\SQLExecutor.ps1" "MY-PC"
65
Shay Levy

Shay Levyの正解に以下を追加したいと思います。PowerShellスクリプトを起動するための小さなバッチスクリプトrun.cmdを作成すると、生活が楽になります。

@echo off & setlocal
set batchPath=%~dp0
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" "MY-PC"

SQLExecutor.ps1と同じパスに配置し、今後はrun.cmdをダブルクリックするだけで実行できます。


注:

  • Run.cmdバッチ内でコマンドライン引数が必要な場合は、単にそれらを%1 ... %9として渡します(または%*を使用してすべてのパラメーターを渡します)。
    powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" %*

  • 変数batchPathには、バッチファイル自体の実行パスが含まれます(これは式%~dp0が使用されるものです)。そのため、Powershellスクリプトを呼び出し元のバッチファイルと同じパスに配置するだけです。

6
Matt

ちょうど試してください:

powershell.exe -noexit D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC"
4
CB.