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

如何在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“


梵蒂冈之花
浏览 1448回答 3
3回答

慕桂英546537

当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=adminpassArg 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解析模式”

杨魅力

只需在.exe名称前添加&运算符。这是在静默模式下安装SQL Server Express的命令:$fileExe = "T:\SQLEXPRADV_x64_ENU.exe"$CONFIGURATIONFILE = "T:\ConfSetupSql2008Express.ini"& $fileExe&nbsp; /CONFIGURATIONFILE=$CONFIGURATIONFILE

素胚勾勒不出你

我在命令和参数中都有空格,这对我有用:$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的答案基本相同,但是如果您动态构建命令参数并将其放在变量中,则此方法有效。
打开App,查看更多内容
随时随地看视频慕课网APP