powershell - 带有参数的 PowerShell 调用不替代 PARAM 来安装 MSI
问题描述
我正在尝试使用 Power-shells Invoke 来运行 MSI 安装。
此代码未运行 MSI 安装。
param ($path1, $path2, $path3)
write-output "path1= $path1"
write-output "path2= $path2"
write-output "path3= $path3"
$PathToMSI = "D:\Install\$path1\'$path2$path3'"
write-output "PathToMSI= $PathToMSI"
$scriptblock = {Start-Process msiexec.exe -Argumentlist "/i $PathToMSI","/qn"}
invoke-command -scriptblock $scriptblock
我知道我的 PathToMSI 是正确的,因为这是显示的内容,但它没有执行。
path1= 20191213.3
path2= X Y Z
path3= .msi
PathToMSI= D:\Install\20191213.3\'X Y Z.msi'
如果我以硬编码运行它,它可以工作吗?
Invoke-Command -ScriptBlock {
D:\install\20191213.3\'X Y Z.msi' /quiet
}
似乎 PathToMSI 并没有解决它的价值。我已经查看了一些类似Error invoking command to install a Msi through Powershell
解决方案
你需要传递$PathToMSI
给ScriptBlock
. 您可以-ArgumentList
为此使用:
Invoke-Command -ArgumentList $PathToMSI -ScriptBlock {
Start-Process msiexec.exe -Argumentlist '/i', $args[0], '/qn'
}
或者,如果在远程计算机上调用,您可以使用$using:
范围:
Invoke-Command -ComputerName server.domain.tld -ScriptBlock {
Start-Process msiexec.exe -Argumentlist '/i', $using:PathToMSI, '/qn'
}
Invoke-Command
在新的 PowerShell 会话中运行您ScriptBlock
,该会话不知道您可能已声明的任何局部变量。范围将查看父会话以进行变量$using
解析,同时-ArgumentList
将传递可以使用.$args
ScriptBlock
推荐阅读
- angular - 在非 Angular 类中获取注入的依赖项
- python - Python3 Cryptodome - 如何解密 pem?
- python - 在虚拟环境中安装 python 站点包
- sql - 通过 VBA 将 Excel 转换为 SQL
- java - 为什么以下三个字符串的哈希码相同?
- acumatica - 如何使用同一页面的重定向操作在第二个表单上设置字段
- vb.net - 通过单击按钮使用 SQL 设置布尔值
- sql - 合并特定列中具有相同值的行
- ruby - 用符号初始化 Ruby 类,在 (menu:) 之后有两个点
- visual-studio-code - 尝试创建新的 Gauge 项目时出错