2016-05-03 11 views
1

Ich habe ein Problem mit der Übergabe eines Parameters mit Leerzeichen in einem Powershell-Skript. Es scheint nur vor dem Raum mit dem ersten Teil der Parameterkette zu arbeitenÜbergeben einer Zeichenfolge mit Leerzeichen in einen Parameter - 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) 

Im Skript dies die Parameter an den folgenden Befehl als solche passieren:

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

in der Befehlszeile, wenn ich betreibe das es funktioniert:

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

Wenn ich dies ausführen es nicht funktioniert überhaupt:

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

Aber wenn ich den Befehl direkt aufrufen es funktioniert:

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

Antwort

2

$fwCommand werden als Einzelwert registriert. Echoargs von Powershell Community-Erweiterungen sind sehr nützlich für Situationen wie diese:

$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> 

Sie können die Werte auf Leerzeichen aufteilen oder Invoke-Expression verwenden.

$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

Ja ich versucht habe, die Zitate aus dem Skript zu entfernen und die Befehlszeile, habe ich versucht, auch das Hinzufügen 2 x doppelte Anführungszeichen Ich habe versucht, einfache Anführungszeichen zu verwenden. So ziemlich alle Permutationen. – user1776732

+0

Haben Sie versucht, den Anruf-Operator '&'? '& cprid_util ...' –

+0

Ich schaffte es, es zu funktionieren, indem ich es aufspalte und beide hereinbringe. Wird die Auflösung posten. – user1776732

0

ich es geschafft, diese Funktion zu erhalten, indem Sie die $ fwCommand Zeichenfolge Aufspaltung

$commandSplit = $fwCommand -split ' ' 
cprid_util -server $firewallIpAdd -verbose rexec -rcmd $commandSplit[0] $commandSplit[1]} 
Verwandte Themen