3 回答

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

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

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