我正在尝试使用splatting安装一个.MSI:
$InstallerArgs @{
"DATABASENAME" = "my_database";
"LOCALIP" = "127.0.0.1";
"USERNAME" = "username1";
"/i" = "C:\Files\Installer.msi";
}然后我打电话给Start-Process:
Start-Process -FilePath msiexec.exe -ArgumentList @InstallerArgs -Wait这将返回错误:Missing an argument for parameter 'ArgumentList'. Specify a parameter of type 'System.String[]' and try again.
Start-Process不可能使用飞溅技术吗
发布于 2018-02-27 15:02:37
实际上,这应该是可行的:
$InstallerArgs = @{
FilePath = 'msiexec.exe'
ArgumentList = @(
'/i',
'C:\Files\Installer.msi',
'LOCALIP="127.0.0.1"',
'USERNAME="username1"'
)
Wait = $True
}
Start-Process @InstallerArgs发布于 2018-02-27 19:44:18
您不一定需要Start-Process。记住: PowerShell是一个shell;它可以运行您键入的命令,就像cmd.exe一样。
msiexec /i C:\Files\Installer.msi DATABASENAME=my_database LOCALIP=127.0.0.1 USERNAME=username1如果参数中的任何一个包含空格,请将它们用"字符括起来。
注意:这将异步运行msiexec (也就是说,如果在脚本中运行命令,它将继续到下一行脚本,而无需等待msiexec完成)。如果您希望在继续之前等待msiexec完成(即,同步运行它),您可以使用Start-Process与-Wait参数,如其他答案中所述。
发布于 2021-09-17 05:02:29
只有当您有key=value对时,此解决方案才能工作。
$params = [string]::Join(" ", ($parameters.GetEnumerator() | ForEach-Object { $_.Key + "=" + $_.Value }))
Start-Process -FilePath msiexec.exe -ArgumentList @InstallerArgs -Wait我是c#开发人员,所以它可能不是传统的ps风格
https://stackoverflow.com/questions/49011281
复制相似问题