首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >散列表启动进程-ArgumentList

散列表启动进程-ArgumentList
EN

Stack Overflow用户
提问于 2018-02-27 14:40:57
回答 3查看 3.5K关注 0票数 2

我正在尝试使用splatting安装一个.MSI:

代码语言:javascript
复制
$InstallerArgs @{
    "DATABASENAME" = "my_database";
    "LOCALIP" = "127.0.0.1";
    "USERNAME" = "username1";
    "/i" = "C:\Files\Installer.msi";
}

然后我打电话给Start-Process:

代码语言:javascript
复制
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不可能使用飞溅技术吗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-27 15:02:37

实际上,这应该是可行的:

代码语言:javascript
复制
$InstallerArgs = @{
    FilePath = 'msiexec.exe'
    ArgumentList = @(
        '/i',
        'C:\Files\Installer.msi',
        'LOCALIP="127.0.0.1"',
        'USERNAME="username1"'
    )
    Wait = $True
}
Start-Process @InstallerArgs
票数 7
EN

Stack Overflow用户

发布于 2018-02-27 19:44:18

您不一定需要Start-Process。记住: PowerShell是一个shell;它可以运行您键入的命令,就像cmd.exe一样。

代码语言:javascript
复制
msiexec /i C:\Files\Installer.msi DATABASENAME=my_database LOCALIP=127.0.0.1 USERNAME=username1

如果参数中的任何一个包含空格,请将它们用"字符括起来。

注意:这将异步运行msiexec (也就是说,如果在脚本中运行命令,它将继续到下一行脚本,而无需等待msiexec完成)。如果您希望在继续之前等待msiexec完成(即,同步运行它),您可以使用Start-Process-Wait参数,如其他答案中所述。

票数 2
EN

Stack Overflow用户

发布于 2021-09-17 05:02:29

只有当您有key=value对时,此解决方案才能工作。

代码语言:javascript
复制
$params = [string]::Join(" ", ($parameters.GetEnumerator() | ForEach-Object { $_.Key + "=" + $_.Value }))
Start-Process -FilePath msiexec.exe -ArgumentList @InstallerArgs -Wait

我是c#开发人员,所以它可能不是传统的ps风格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49011281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档