2017-10-12 6 views
2

J'ai téléchargé Powerbi 32 bit et 64 bit fichiers .msi de https://powerbi.microsoft.com/en-us/downloads/

et créé sous script.

$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 

Script fonctionne parfaitement que si le source directory/$ScriptDir ne dispose pas d'espace entre les deux. par exemple si le répertoire source est c:/test ou c:/test_test/test cela fonctionne parfaitement.

Mais si le source directory/$ScriptDir a des espaces, il se bloque avec une erreur d'option msi ci-dessous

enter image description here

par exemple si source directory/$ScriptDir est C:\Users\Dell\Desktop\New folder script Powershell se bloque au message ci-dessus .. encore aucune installation.

i ont ajouté écho à la fin du script pour trouver le chemin $ScriptDir

et ci-dessous donne résultat d'écho qui me rend plus confus.

C:\Users\Dell\Desktop\New folder 

Vous ne savez pas pourquoi msiexec.exe ne peut pas exécuter d'arguments lorsqu'il y a un espace.

S'il vous plaît aidez-moi à fuir Quelle pourrait être la raison? Comment cela pourrait-il être corrigé même si $ ScriptDir a des espaces?

Répondre

2

Si vous appelez le msiexec.exe (ou la plupart des autres commandes) de la ligne de commande avec un chemin contenant des espaces, vous devez placer ce chemin entre guillemets.

Malheureusement, votre chemin au moment où il est en cours passe par ne pas réellement les (malgré leur fournissant dans votre table de hachage.)

Pour ce faire, prévoir un échappèrent entre guillemets (« »):

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

Cela a le résultat final pratique de: pour les chemins, enveloppez-les dans trois guillemets.

+1

C'était super amusant :) appris à utiliser des guillemets échappés ("") – user879