我已经看到--%与执行具有多个参数的命令有关的引用.我在google上搜索有关它的更多信息时遇到了麻烦.我怀疑谷歌认为我正在尝试一种特殊的语法.我希望能够从Powershell执行plink命令并使用变量添加如下参数:
&"./plink.exe" --% $Hostname -l $Username -pw $Password $Command
Run Code Online (Sandbox Code Playgroud)
如果我指定信息,它可以工作,但不能用变量替换
我有同样的问题,这个问题有一个解决方法.我最近在博客上发表了关于http://mscodingblog.blogspot.com/2013/09/use-powershell-variables-after-escaping.html的博文,我从自己的答案中获取灵感,执行外部命令不接受参数
诀窍是将--%自身用作变量,并将其与powershell中的其他变量一起包含在内.
而不是这个
&"./plink.exe" --% $Hostname -l $Username -pw $Password $Command
Run Code Online (Sandbox Code Playgroud)
试试这个
$escapeparser = '--%'
& "./plink.exe" $escapeparser $Hostname -l $Username -pw $Password $Command
Run Code Online (Sandbox Code Playgroud)
可能是相关的,但我在所有变量中都使用了单引号.
v3发布后不久我也在博客上写了这篇文章. --%将PowerShell从该字符序列转换为哑语解析器,直到行结束.这意味着你没有得到任何变量评估--%..但是,你的情况下使用环境变量,如下所示:
$env:hostname = $hostname
$env:user = $user
$env:passwd = $password
$env:command = $command
.\plink.exe --% %hostname% -l %user% -pw %passwd% %Command%
Run Code Online (Sandbox Code Playgroud)
也就是说,在这种情况下,我认为没有任何理由使用 - %.这应该工作得很好:
.\plink.exe $Hostname -l $Username -pw $Password $Command
Run Code Online (Sandbox Code Playgroud)
您只想--%在EXE的命令行参数期望带有跳转PowerShell的字符的参数时使用,例如:
tf.exe status . /r /workspace:*;domain\user
Run Code Online (Sandbox Code Playgroud)
在这种情况下,tf.exe用于;将工作空间名称与工作空间所有者分开,但PowerShell将其解释;为语句分隔符,这会混淆tf.exe的调用.你会像这样解决它:
tf.exe status . /r --% /workspace:*;domain\user
Run Code Online (Sandbox Code Playgroud)
BTW在&这里不必使用,因为你不需要引用`.\ plink.exe'.如果文件名或路径包含空格,您只需要引用它.
--%将阻止Powershell解析语句的其余部分.Jose Barreto在TechNet上的博客对此问题有一个非常相关的条目.除了提供示例用法之外--%,还有其他一些cmd /c可能对解决您的问题更有帮助,因为powershell在解决变量后--%似乎对您的用例有问题.
--% 是Powershell版本3中的新功能.
链接博客的一些示例用法:
PS C:\> ICACLS.EXE --% C:\TEST /GRANT USERS:(F)
processed file: C:\TEST
Successfully processed 1 files; Failed processing 0 files
PS C:\> ICACLS.EXE C:\TEST --% /GRANT USERS:(F)
processed file: C:\TEST
Successfully processed 1 files; Failed processing 0 files
Run Code Online (Sandbox Code Playgroud)
正如我上面提到的,你可能最好尝试一个可以使用powershell变量的解决方案. & " "或者cmd /c " "都将解决变量,并且可能是一个好的起点.
cmd /c "path/plink.exe $Hostname -l $Username -pw $Password $Command"
Run Code Online (Sandbox Code Playgroud)
编辑:我在Powershell语言规范中挖掘了一些不相关的东西并找到了一些文档--%.我将在此发布,希望能为未来的用户在线查找更容易:
摘录自8.2"管道声明"
- %的参数表示其后面的所有参数都将以最小的解析和处理进行传递.该参数称为verbatim参数.verbatim参数之后的参数不是PowerShell表达式,即使它们是语法上有效的PowerShell表达式.
Windows PowerShell:如果命令类型为Application,则参数 - %不会传递给命令.在 - %之后的参数扩展了任何环境变量(由%包围的字符串).例如:
echoargs.exe - %"%path%"#%path%替换为值$ env:path
| 归档时间: |
|
| 查看次数: |
4950 次 |
| 最近记录: |