相关疑难解决方法(0)

如何使用带空格和引号的参数在PowerShell中运行EXE文件

如何在PowerShell中运行以下命令?

C:\ Program Files\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql ="Data Source = mysource; Integrated Security = false; User ID = sa; Pwd = sapass !; Database = mydb;" -dest:dbfullsql ="Data Source =.\ mydestsource; Integrated Security = false; User ID = sa; Pwd = sapass !; Database = mydb;",computername = 10.10.10.10,username = administrator,password = adminpass"

parameters quotes powershell exe spaces

311
推荐指数
13
解决办法
67万
查看次数

如何从字符串中执行任意本机命令?

我可以通过以下方案表达我的需求:编写一个接受字符串的函数作为本机命令运行.

这并不是一个想法:如果你正在与公司其他地方的其他命令行实用程序连接,那么它将为你提供逐字运行的命令.因为您不控制命令,所以您需要接受任何有效的命令作为输入.这些是我无法轻易克服的主要问题:

  1. 该命令可能执行生活在其中包含空格的路径中的程序:

    $command = '"C:\Program Files\TheProg\Runit.exe" Hello';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 该命令可能包含带空格的参数:

    $command = 'echo "hello world!"';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 该命令可能包含单蜱和双蜱:

    $command = "echo `"it`'s`"";
    
    Run Code Online (Sandbox Code Playgroud)

没有干净的方法来完成这个?我只能设计出奢华和丑陋的变通方法,但对于脚本语言,我觉得这应该是简单的.

powershell scripting

195
推荐指数
3
解决办法
22万
查看次数

从PowerShell执行存储在变量中的命令

我有一个命令,我已经构建并存储在PowerShell中的变量中.如果我执行Write-Host并将其复制并粘贴到标准cmd.exe窗口中,则此命令有效.

如何从脚本中执行此命令?

我已经尝试了几种Invoke-Command或Invoke-Expression的组合而没有运气.

这是我构建变量的方式:

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"
Run Code Online (Sandbox Code Playgroud)

这是变量在打印到屏幕时的样子:

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log
Run Code Online (Sandbox Code Playgroud)

powershell

142
推荐指数
2
解决办法
16万
查看次数

使用PowerShell脚本执行EXE文件

我正在尝试使用PowerShell脚本执行EXE文件.如果我使用命令行它没有问题(首先我提供可执行文件的名称和一系列参数来调用它):

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode
Run Code Online (Sandbox Code Playgroud)

但是在脚本中执行完全相同的操作会返回错误:

术语 "C:\ Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe"C:\ temp\TestProject1\TestProject1.pjs/run/exit/SilentMode' 无法识别为cmdlet的名称,函数,脚本文件或可操作程序.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.

(我使用"&"运算符调用了命令.)

我该如何解决这个问题?

powershell powershell-2.0

101
推荐指数
3
解决办法
23万
查看次数

PowerShell - Start-Process和Cmdline开关

我可以运行这个罚款:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
start-process $msbuild -wait
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码(下面)时,我收到一个错误:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo" 
start-process $msbuild -wait
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用start-process将参数传递给MSBuild?我愿意不使用启动过程,我使用它的唯一原因是我需要将"命令"作为变量.

当我 在一行上有
C:\ WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe/v:q/nologo
时,如何在Powershell中处理它?

我应该使用某种eval()类型的函数吗?

powershell command-line start-process

72
推荐指数
4
解决办法
21万
查看次数

PowerShell从命令行参数中删除双引号

最近,每当涉及双引号时,我在使用PowerShell的GnuWin32时遇到了一些麻烦.

经过进一步调查,看起来PowerShell正在从命令行参数中删除双引号,即使正确转义也是如此.

PS C:\Documents and Settings\Nick> echo '"hello"'
"hello"
PS C:\Documents and Settings\Nick> echo.exe '"hello"'
hello
PS C:\Documents and Settings\Nick> echo.exe '\"hello\"'
"hello"
Run Code Online (Sandbox Code Playgroud)

请注意,双引号在传递给PowerShell的echo cmdlet时会出现,但是当作为参数传递给echo.exe时,除非使用反斜杠进行转义,否则将删除双引号(即使PowerShell的转义字符是反引号,而不是反斜杠).

这对我来说似乎是个错误.如果我将正确的转义字符串传递给PowerShell,那么PowerShell应该处理可能需要的任何转义,但是它会调用该命令.

这里发生了什么?

目前,修复方法是根据这些规则转义命令行参数(这似乎是CreateProcessPowerShell用来调用.exe文件的API调用):

  • 要传递双引号,请使用反斜杠转义:\"- >"
  • 要传递一个或多个反斜杠后跟双引号,请使用另一个反斜杠转义每个反斜杠并转义引号:\\\\\"- >\\"
  • 如果没有后跟双引号,则反斜杠不需要转义:\\- >\\

请注意,可能需要进一步转义双引号以将Windows API转义字符串中的双引号转义为PowerShell.

下面是一些例子,与echo.exe从的GnuWin32:

PS C:\Documents and Settings\Nick> echo.exe "\`""
"
PS C:\Documents and Settings\Nick> echo.exe "\\\\\`""
\\"
PS C:\Documents and Settings\Nick> echo.exe "\\"
\\
Run Code Online (Sandbox Code Playgroud)

我想如果你需要传递一个复杂的命令行参数,这很快就会成为地狱.当然,这些都没有记录在CreateProcess()PowerShell文档中.

另请注意,将双引号的参数传递给.NET函数或PowerShell cmdlet不是必需的.为此,您只需要将双引号转义为PowerShell.

windows powershell command-line

40
推荐指数
4
解决办法
2万
查看次数

当参数有空格时,如何从powershell调用msdeploy?

我在参数中遇到空格问题,我尝试从powershell脚本发送到msdeploy.

还有许多其他相关文章,但没有一个解决问题.
使用Power Shell和MSDeploy的问题.
类似的SO问题不起作用:如何在带有空格和引号的参数的
PowerShell中运行exe PowerShell BUG:执行需要引号和变量的命令实际上是不可能的
另一个SO问题不起作用:在PowerShell 2.0中传递参数

当我使其变得更复杂时,成功然后失败的最简单的例子就是转储默认网站.

$ msdeploy ="C:\ Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
&$ msdeploy -verb:dump -source:appHostConfig =`'default web site`'-verbose
== SUCCESS

这个?

$ sitename ="默认网站"
&$ msdeploy -verb:dump -source:appHostConfig = $ sitename -verbose
== FAIL,出现以下错误
msdeploy.exe:错误:无法识别的参数'" - source:"appHostConfig = default'.所有参数必须以" - "开头.
在C:\ xxx\test.ps1:122 char:6
+&
+ CategoryInfo:NotSpecified :(错误:Unrecogn ...以" - "开头:String)[],RemoteException
+ FullyQualifiedErrorId:NativeCommandError
错误计数:1.

以下变化也失败了
#FAIL
$ sitename =`'默认网站''
$ sitename =`'"默认网站"`'
$ sitename ="`''默认网站`'"
$ sitename ="默认网站"
$ …

iis powershell msdeploy

25
推荐指数
4
解决办法
2万
查看次数

如何在命令行powershell params中转换&符号,分号和花括号?

我正在使用powershell脚本生成带有数据库密码等的配置文件.这个脚本的正常用法是生成并使用密码,但是稍等片刻,我需要访问其他开发人员的数据库,因此我需要将密码传递给powershell脚本.

问题是密码是乱码,包括&符号,分号和花括号.我怎样才能将它传递给powershell的命令行调用?(这个答案另一个答案是有帮助的,但对分号和花括号没有帮助.)

这是我尝试过的:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:错误消息:不允许使用&符号.&运营商留作将来使用; 用双引号("&")包装&符号以将其作为字符串的一部分传递.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:执行$ password的写主机只会将字符串赋予分号.另外,-otherparam有默认值,而不是我传入命令行的值.

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:write-host $ password现在打印到报价前的第一个反引号.是的,它会输出反引号,这似乎表明一切都在解析所有错误.哦,脚本中调用的其他函数之一引发了一个我以前没见过的异常​​(异常调用带有"4"参数的"AcquireToken":"authentication_canceled:用户取消认证"),这表明该参数解析完全以一种新的迷人方式进行了解析.这是写入主机$密码产生的:

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:write-host $ password现在打印到报价前的第一个反引号.第二个参数处于默认状态.(即,与上次相同的结果.)在正面,上一个例子中抛出的异常没有出现.

那么如何从Windows命令行将任意ASCII字符串传递给powershell字符串参数?或者至少,我如何逃脱分号,&符号和花括号?

parameters powershell cmd

18
推荐指数
2
解决办法
3万
查看次数

powershell将多个参数发送到外部命令

我试图从powershell脚本运行外部exe.

这个exe需要4个参数.

我一直在尝试invoke-item,invoke-command和'C:\ program files\mycmd.exe myparam'的每一个组合,在C:\中创建一个快捷方式来摆脱路径中的空格.

我可以使用一个参数,但不能更多.我收到各种错误.

总结一下,如何向exe发送4个参数?

parameters powershell

14
推荐指数
2
解决办法
3万
查看次数

使用PowerShell从包含空格的目录运行EXE文件

我正在尝试运行MSTest.exe C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE.更重要的是,我将当前目录中的所有程序集都设置为单独的/ testcontainer参数.如果没有PowerShell的抱怨,我无法弄清楚如何做到这一点.

$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()

$MSTestCall = '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'

foreach($file in Get-ChildItem $CurrentDirectory) 
{
    if($file.name -match "\S+test\S?.dll$" )
    {
        $MSTestArguments += "/TestContainer:" + $file + " "
    }
}

$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:\someDirectory\local64.testsettings"

Invoke-Expression "$MSTestCall $MSTestArguments"
Run Code Online (Sandbox Code Playgroud)

我从这段代码得到的错误是:

Invoke-Expression:您必须在'/'运算符的右侧提供值表达式.

当我尝试在名称中没有空格的目录中调用mstest.exe时,我不会收到此错误(不需要额外的").

当我尝试使用时&,

&$MSTestCall $MSTestArguments
Run Code Online (Sandbox Code Playgroud)

它将$ MSTestArguments作为单个参数交给MSTest提示抛出.建议?

powershell spaces

12
推荐指数
1
解决办法
1万
查看次数