为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2019-10-24 15:36:45
如何在PowerShell中运行以下命令?C:\ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe -verb:sync -source:dbfullsql =“数据源= mysource;集成安全性= false;用户ID = sa; Pwd = sapass !;数据库= mydb;” -dest:dbfullsql =“ Data Source =。\ mydestsource; Integrated Security = false; User ID = sa; Pwd = sapass!; Database = mydb;”,计算机名= 10.10.10.10,用户名= administrator,密码= adminpass“
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

当PowerShell看到以字符串开头的命令时,它只会对字符串求值,也就是说,它通常会将其回显到屏幕,例如:


PS> "Hello World"

Hello World

如果您希望PowerShell将字符串解释为命令名称,请使用调用运算符(&),如下所示:


PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'

之后,您可能只需要引用包含空格和/或引用字符的参数/参数对。当您使用复杂的命令行参数调用像这样的EXE文件时,拥有一个向您展示PowerShell如何将参数发送到EXE文件的工具通常非常有帮助。在PowerShell的社区扩展有这样的工具。它称为echoargs。您只需用echoargs替换EXE文件-保留所有参数,这将向您展示EXE文件如何接收参数,例如:


PS> echoargs -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


Arg 0 is <-verb:sync>

Arg 1 is <-source:dbfullsql=Data>

Arg 2 is <Source=mysource;Integrated>

Arg 3 is <Security=false;User>

Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>

Arg 5 is <-dest:dbfullsql=Data>

Arg 6 is <Source=.\mydestsource;Integrated>

Arg 7 is <Security=false;User>

Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>

使用echoargs可以尝试直到正确为止,例如:


PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"

Arg 0 is <-verb:sync>

Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>

事实证明,在维护连接字符串周围的双引号之前,我付出了很大的努力。显然这不是必需的,因为即使cmd.exe也会将其删除。


顺便说一句,向PowerShell团队致敬。如果您需要将内部双引号保留在适当的位置,它们对显示单引号和双引号的具体含义很有帮助。:-)他们也意识到这是一个痛苦的领域,但是受特定问题影响的人数的驱动。如果这是您的不便,请投票提交PowerShell Bug。


有关PowerShell如何解析的更多信息,请查看我的有效PowerShell博客系列 -特别是项目10-“了解PowerShell解析模式”


查看完整回答
反对 回复 2019-10-24
?
杨魅力

TA贡献1811条经验 获得超5个赞

只需在.exe名称前添加&运算符。这是在静默模式下安装SQL Server Express的命令:


$fileExe = "T:\SQLEXPRADV_x64_ENU.exe"

$CONFIGURATIONFILE = "T:\ConfSetupSql2008Express.ini"


& $fileExe  /CONFIGURATIONFILE=$CONFIGURATIONFILE


查看完整回答
反对 回复 2019-10-24
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我在命令和参数中都有空格,这对我有用:


$Command = "E:\X64\Xendesktop Setup\XenDesktopServerSetup.exe"

$Parms = "/COMPONENTS CONTROLLER,DESKTOPSTUDIO,DESKTOPDIRECTOR,LICENSESERVER,STOREFRONT /PASSIVE /NOREBOOT /CONFIGURE_FIREWALL /NOSQL"


$Prms = $Parms.Split(" ")

& "$Command" $Prms

它与Akira的答案基本相同,但是如果您动态构建命令参数并将其放在变量中,则此方法有效。


查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 1436 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信