2017-10-12 8 views
2

私はhttps://powerbi.microsoft.com/en-us/downloads/

からPowerbi 32 bit64 bit MSIファイルをダウンロードし、スクリプトの下に作成しました。

$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:/testまたはc:/test_test/testの場合、完全に機能します。

しかしsource directory/$ScriptDirにスペースが含まれている場合source directory/$ScriptDirC:\Users\Dell\Desktop\New folder PowerShellスクリプトであれば、それは例えば

enter image description here

下記のMSIオプションのエラーでハングは、上記のメッセージ ..まだありませんインストール時にハングアップします。

私はパスに$ScriptDir

を見つけるために、スクリプトの最後にエコーを追加して、それは私がさらに混乱になり、エコー結果の下になります。

C:\Users\Dell\Desktop\New folder 

スペースがあるときにmsiexec.exeが引数を実行できない理由がわかりません。

どうすればいいのですか? $ ScriptDirにスペースがあっても、これをどうやって動くように修正できますか?

答えて

2

コマンドラインからmsiexec.exe(または他のほとんどのコマンド)をスペースで区切って呼び出す場合は、そのパスを引用符で囲む必要があります。

残念ながら、それが通過することだ時点で、あなたのパスは、実際には(あなたのハッシュテーブルにそれらを供給にもかかわらず。)それらを持っていません

これを行うには、いくつかのエスケープ引用符(「」)を提供:

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

パスの場合、次のような結果が実用的です。3つの引用符で囲みます。

+1

これはとても楽しいものでした:)エスケープされた引用符( "")の使用方法を学びました。 – user879

関連する問題