首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Start-Process和Stop Parsing (--%)参数

Start-Process和Stop Parsing (--%)参数
EN

Stack Overflow用户
提问于 2016-09-07 02:02:40
回答 3查看 1.4K关注 0票数 1

--%参数按预期工作时遇到了问题。我的$TaskParams变量具有字符'<',它被powershell解释为重定向,因此需要进行转义。

但是,以下操作不起作用:

代码语言:javascript
复制
$CreateTask = Start-Process PowerShell.exe "$ScriptLocation --% $TaskParams" -Wait -PassThru

在没有--%的情况下,当我手动删除任何'<'字符时,它可以工作:

代码语言:javascript
复制
$CreateTask = Start-Process PowerShell.exe "$ScriptLocation $TaskParams" -Wait -PassThru

收到错误:

代码语言:javascript
复制
 Start-Process : A positional parameter cannot be found that accepts argument 
'--%'.

注意:我使用的是PS 5.0

我是否使用了错误的--%参数?任何帮助或指点,我们将不胜感激。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-07 05:16:04

您不需要启动powershell.exe的新副本,也不需要使用Start-Process从另一个脚本中运行脚本。只需将脚本命令及其参数放在另一个脚本中的一行中。例如,假设您有script2.ps1:

代码语言:javascript
复制
param(
  [String] $Name
)
Write-Host "Hello, $Name"

现在假设你还有script1.ps1:

代码语言:javascript
复制
Write-Host "This is script1.ps1"
.\Script2.ps1 -Name "Bill Stewart"
Write-Host "script1.ps1 is finished"

如果现在运行script1.ps1:

代码语言:javascript
复制
PS C:\> .\Script1.ps1
This is script1.ps1
Hello, Bill Stewart
script1.ps1 is finished
票数 3
EN

Stack Overflow用户

发布于 2016-09-07 02:16:58

停止解析符号--%仅在直接调用可执行文件或使用调用操作符&时有效;在调用PowerShell脚本/函数/cmdlet时不使用。

票数 4
EN

Stack Overflow用户

发布于 2016-09-07 02:53:01

如果你真的想使用Start-Process,你可以对参数进行编码,然后运行它。当提升过去的UAC时,我使用类似的东西:

代码语言:javascript
复制
$Code = ". '$ScriptLocation' $TaskParams"
$Encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))

Start-Process PowerShell.exe -ArgumentList "-EncodedCommand",$Encoded -Wait -PassThru

我很确定这会达到你想要的效果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39355201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档