2016-05-03 39 views
1

スペースを含むパラメータをpowershellスクリプトに渡す際に問題があります。これだけのような、次のコマンドにパラメータを渡しますスクリプト内のスペースの前にパラメータ文字列の最初の部分でパラメータにスペースを含む文字列を渡す - powershell

[CmdletBinding()] 
Param(

[Parameter(Mandatory=$True, ParameterSetName='firewallCommand',Position=0,HelpMessage="Input Firewall Index")] 
[string]$fwName, 

[Parameter(Mandatory=$True, ParameterSetName='firewallCommand',Position=1, HelpMessage="Input Firewall Command")] 
[string]$fwCommand) 

を動作するようです:コマンドラインで

cprid_util -server $firewallIpAdd -verbose rexec -rcmd "$fwCommand" 

場合私はこれを実行する場合

.\fwcommand_run.ps1 -fwName firewall-name -fwCommand "ps" 

は、それがすべてでは動作しません:私はそれが動作これを実行する

.\fwcommand_run.ps1 -fwName firewall-name -fwCommand "ps -ef" 

しかし、私は直接コマンドを起動する場合には、作業を行います。

cprid_util -server 10.1.128.4 -verbose rexec -rcmd ps -ef 

答えて

2

$fwCommandが単一の値として登録されています。 PowerShellのコミュニティの拡張機能からEchoargsは、このような状況のために非常に有用である:

$fwCommand = "ps -ef" 
$firewallIpAdd = "127.0.0.1" 

$command = "cprid_util -server $firewallIpAdd -verbose rexec -rcmd '$fwCommand'" 
[management.automation.psparser]::Tokenize($command,[ref]$null) | Format-Table Content, Type -AutoSize 

Content    Type 
-------    ---- 
cprid_util   Command 
-server CommandParameter 
127.0.0.1 CommandArgument 
-verbose CommandParameter 
rexec  CommandArgument 
-rcmd  CommandParameter 
ps -ef    String 

.\EchoArgs.exe -server $firewallIpAdd -verbose rexec -rcmd $fwCommand 

Arg 0 is <-server> 
Arg 1 is <127.0.0.1> 
Arg 2 is <-verbose> 
Arg 3 is <rexec> 
Arg 4 is <-rcmd> 
Arg 5 is <ps -ef> 

あなたは空白で値を分割またはInvoke-Expressionを使用することができます。

$firewallIpAdd = "127.0.0.1" 
$fwCommand = "ps -ef" 
Invoke-Expression ".\EchoArgs.exe -server $firewallIpAdd -verbose rexec -rcmd $fwCommand" 

Arg 0 is <-server> 
Arg 1 is <127.0.0.1> 
Arg 2 is <-verbose> 
Arg 3 is <rexec> 
Arg 4 is <-rcmd> 
Arg 5 is <ps> 
Arg 6 is <-ef> 
+0

$ fwCommand文字列を分割することで、この作業を取得するために管理はい、私はスクリプトとコマンドラインから引用符を削除して試してみました、私はまた、2×を追加し、二重引用符を試してみました私は一重引用符を使用しようとしました。かなり多くの順列。 – user1776732

+0

呼び出し演算子 '&'を使ってみましたか? '&cprid_util ...' –

+0

私はそれを分割して両方を通過させることでそれを得ることができました。決議を投稿します。 – user1776732

0

私は

$commandSplit = $fwCommand -split ' ' 
cprid_util -server $firewallIpAdd -verbose rexec -rcmd $commandSplit[0] $commandSplit[1]} 
関連する問題