我从https://powerbi.microsoft.com/en-us/downloads/下载了Powerbi 32 bit
和64 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
有空格,则挂起时会出现msi选项错误
例如,如果source directory/$ScriptDir
为C:\Users\Dell\Desktop\New folder
,则powershell脚本会挂在上面的消息中
..但没有安装。
我在脚本末尾添加了echo以查找路径$ScriptDir
它给出了下面的回声结果,这让我更加困惑。
C:\Users\Dell\Desktop\New folder
不确定为什么msiexec.exe在有空格时无法运行参数。
请帮我搞清楚可能是什么原因?即使$ ScriptDir有空格,怎么能修复它?
答案 0 :(得分:3)
如果要从命令行调用msiexec.exe
(或大多数其他命令),并在其中包含空格,则需要将该路径包装在引号中。
不幸的是,你通过它的路径实际上没有它们(尽管在哈希表中提供它们。)
为此,请提供一些转义引号(“”):
$MSIArguments = @(
"/i"
"""$ScriptDir\PBIDesktop.msi"""
"/qn"
# "/norestart"
"ACCEPT_EULA=1"
)
这具有以下实际结果:对于路径,将它们包装在三个引号中。