3 回答

TA貢獻1848條經(jīng)驗 獲得超10個贊
當(dāng)PowerShell看到以字符串開頭的命令時,它只會對字符串求值,也就是說,它通常會將其回顯到屏幕,例如:
PS> "Hello World"
Hello World
如果您希望PowerShell將字符串解釋為命令名稱,請使用調(diào)用運算符(&),如下所示:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
之后,您可能只需要引用包含空格和/或引用字符的參數(shù)/參數(shù)對。當(dāng)您使用復(fù)雜的命令行參數(shù)調(diào)用像這樣的EXE文件時,擁有一個向您展示PowerShell如何將參數(shù)發(fā)送到EXE文件的工具通常非常有幫助。在PowerShell的社區(qū)擴展有這樣的工具。它稱為echoargs。您只需用echoargs替換EXE文件-保留所有參數(shù),這將向您展示EXE文件如何接收參數(shù),例如:
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團隊致敬。如果您需要將內(nèi)部雙引號保留在適當(dāng)?shù)奈恢?,它們對顯示單引號和雙引號的具體含義很有幫助。:-)他們也意識到這是一個痛苦的領(lǐng)域,但是受特定問題影響的人數(shù)的驅(qū)動。如果這是您的不便,請投票提交PowerShell Bug。
有關(guān)PowerShell如何解析的更多信息,請查看我的有效PowerShell博客系列 -特別是項目10-“了解PowerShell解析模式”

TA貢獻1811條經(jīng)驗 獲得超6個贊
只需在.exe名稱前添加&運算符。這是在靜默模式下安裝SQL Server Express的命令:
$fileExe = "T:\SQLEXPRADV_x64_ENU.exe"
$CONFIGURATIONFILE = "T:\ConfSetupSql2008Express.ini"
& $fileExe /CONFIGURATIONFILE=$CONFIGURATIONFILE

TA貢獻1827條經(jīng)驗 獲得超9個贊
我在命令和參數(shù)中都有空格,這對我有用:
$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的答案基本相同,但是如果您動態(tài)構(gòu)建命令參數(shù)并將其放在變量中,則此方法有效。
添加回答
舉報