如何在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;",computername=10.10.10.10,username=administrator,password=adminpass"


当前回答

所以,我遇到了一个类似的问题,我选择用这种方式来解决它:

用反撇号(')转义引号(")字符 用引号包围新表达式(") 使用调用操作符(&),对新字符串发出invoke-expression命令

示例解决方案:

&{调用-表达式"C:\程序文件\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql= ' "数据源=mysource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' " -dest:dbfullsql= ' "数据源=.\mydestsource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' ",计算机名=10.10.10.10,用户名=管理员,密码=adminpass ' "}

其他回答

只需在.exe名称之前添加&操作符。 下面是沉默模式下安装SQL Server Express的命令:

$fileExe = "T:\SQLEXPRADV_x64_ENU.exe"
$CONFIGURATIONFILE = "T:\ConfSetupSql2008Express.ini"

& $fileExe  /CONFIGURATIONFILE=$CONFIGURATIONFILE

这招对我很管用:

PowerShell.exe -Command "& ""C:\Some Script\Path With Spaces.ps1"""

关键似乎是整个命令都用外引号括起来,“&”&用于指定正在执行的另一个子命令文件,然后最后在路径/文件名周围转义(双-双-)引号,其中有空格。

这也是MS连接问题的唯一解决方案,即-File不传递非零返回码,而-Command是唯一的替代方案。但到目前为止,人们认为-Command的一个限制是它不支持空格。我也更新了反馈内容。

http://connect.microsoft.com/PowerShell/feedback/details/750653/powershell-exe-doesn-t-return-correct-exit-codes-when-using-the-file-option

如果有人想知道如何运行一个可执行文件:

…> \ file.exe。

or

……> \路径\ \ file.exe

所以,我遇到了一个类似的问题,我选择用这种方式来解决它:

用反撇号(')转义引号(")字符 用引号包围新表达式(") 使用调用操作符(&),对新字符串发出invoke-expression命令

示例解决方案:

&{调用-表达式"C:\程序文件\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql= ' "数据源=mysource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' " -dest:dbfullsql= ' "数据源=.\mydestsource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' ",计算机名=10.10.10.10,用户名=管理员,密码=adminpass ' "}

你可以使用很多方法来做到这一点。

还有其他方法,如使用调用操作符(&),Invoke-Expression cmdlet等。但它们被认为是不安全的。微软建议使用Start-Process。

方法1

一个简单的例子

Start-Process -NoNewWindow -FilePath "C:\wamp64\bin\mysql\mysql5.7.19\bin\mysql" -ArgumentList "-u root","-proot","-h localhost"

在你的情况下

Start-Process -NoNewWindow -FilePath "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -ArgumentList "-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"

在这个方法中,你用逗号分隔ArgumentList中的每个参数。

方法2

简单的例子

Start-Process -NoNewWindow -FilePath "C:\wamp64\bin\mysql\mysql5.7.19\bin\mysql" -ArgumentList "-u root -proot -h localhost"

在你的情况下

Start-Process -NoNewWindow -FilePath "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -ArgumentList "-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"

这个方法更简单,因为它允许一次性输入参数。

注意,在powershell中,要在字符串中表示引号("),您应该插入重音(')(这是美国键盘中Tab键上方的键)。 -NoNewWindow 参数用于在当前控制台窗口中显示新进程。默认情况下,Windows PowerShell会打开一个新窗口。

参考:Powershell/Scripting/Start-Process