我从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包含空格,如何将其固定运行?
最佳答案
如果要从命令行调用msiexec.exe
(或大多数其他命令),并在其中带有空格的路径,则需要将该路径用引号引起来。
不幸的是,您的路径在传递时实际上并没有它们(尽管在您的哈希表中提供了它们)。
为此,请提供一些转义的引号(“”):
$MSIArguments = @(
"/i"
"""$ScriptDir\PBIDesktop.msi"""
"/qn"
# "/norestart"
"ACCEPT_EULA=1"
)
这有一个实际的最终结果:对于路径,将它们用三个引号引起来。
关于powershell - 如何在Powershell中使用$ ScriptDir和$ ScriptDir传递msi ArgumentList?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46699870/