2017-10-12 65 views
2

我下載了Powerbi 32 bit64 bit msi文件從https://powerbi.microsoft.com/en-us/downloads/

並創建下面的腳本。

$ScriptDir = (Split-Path $MyInvocation.MyCommand.Path) 


$MSIArguments = @(
    "/i" 
    "$ScriptDir\PBIDesktop.msi" 
    "/qn" 
# "/norestart" 
    "ACCEPT_EULA=1" 
) 

$MSIArguments2 = @(
    "/i" 
    "$ScriptDir\PBIDesktop_x64.msi" 
    "/qn" 
# "/norestart" 
    "ACCEPT_EULA=1" 
) 

$architecture=gwmi win32_processor | select -first 1 | select addresswidth 
if ($architecture.addresswidth -eq "64"){ 
    Start-Process "msiexec.exe" -ArgumentList $MSIArguments2 -wait 
} 
elseif ($architecture.addresswidth -eq "32"){ 
    Start-Process "msiexec.exe" -ArgumentList $MSIArguments -wait 
    } 
$ScriptDir 

只有當source directory/$ScriptDir之間沒有空格時,腳本才能正常工作。例如,如果源目錄是c:/testc:/test_test/test,它可以很好地工作。

但如果source directory/$ScriptDir有空格,它與MSI選項錯誤掛在下面

enter image description here

給出例如,如果source directory/$ScriptDirC:\Users\Dell\Desktop\New folder PowerShell腳本掛起,在上述消息 ..還沒有安裝。

我已經在腳本的末尾添加回聲尋找路徑$ScriptDir

,它給下面的回聲結果這讓我更加混亂。

C:\Users\Dell\Desktop\New folder 

不確定爲什麼msiexec.exe無法在有空格時運行參數。

請幫我解釋一下可能是什麼原因?即使$ ScriptDir有空格,如何解決這個問題?

回答

2

如果您要從命令行調用msiexec.exe(或大多數其他命令),並在其中包含空格的路徑,則需要將該路徑用引號括起來。

不幸的是,它被通過的時候你的路徑實際上並沒有他們(儘管你的哈希表向他們提供。)

要做到這一點,提供一些逃脫引號(「」):

$MSIArguments = @(
    "/i" 
    """$ScriptDir\PBIDesktop.msi""" 
    "/qn" 
# "/norestart" 
    "ACCEPT_EULA=1" 
) 

這具有實際的最終結果:對於路徑,將它們包裝在三個引號中。

+1

這是超好玩的:)學會了如何使用轉義引號(「」) – user879

相關問題