msiexec /i "example.msi" /q UserName="my username" password="my password"
上面的命令在命令行中完美执行,但我需要在一行中执行powershell。 所以请任何人建议。 我是powershell的新手。
我试过下面的一个:
Start-Process -FilePath msiexec -ArgumentList / /i, example.msi, "UserName='my username'","password='my password" -Wait
但它显示了一些问题:
Start-Process : A positional parameter cannot be found that accepts argument 'System.Object[]'.
At line:1 char:1
+ Start-Process -FilePath msiexec -ArgumentList / /i, "'example.msi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
答案 0 :(得分:1)
你几乎得到了它,试试这个:
start msiexec -ArgumentList
"/i example.msi /q UserName=""my username"" password=""my password"""
如果你的任何参数需要引号,你需要加倍。
答案 1 :(得分:0)
尝试使用" Invoke-Command"小命令。应该看起来像这样:
$computerlist = get-content c:\temp\ComputerNames.txt
foreach ($computer in $computerlist) {
Invoke-Command -ComputerName $computer -ScriptBlock {msiexec /i "\\servername\pathToFile\example.msi" /q UserName="my username" password="my password"}
}
尝试查看此命令的帮助。
答案 2 :(得分:0)
通常,当您看到参数或 argumentslist 等参数时,请始终牢记数组是预期的。同样的`& path args'格式。
关于数组的一个很酷的事情是,每个项目都将被提供给可执行文件,就像它被隐式引用一样,类似于你在命令提示符中引用包含空格的参数。
出于这个原因,我总是使用像
这样的结构$arguments=@($var1,$var2)
像这样我永远不必担心变量中的内容。在多行中创建数组时,根据每种情况,它也使更改管理变得更容易,因为添加参数是行更改。它还有助于在排除故障时对其进行评论
例如
$arguments=@(
$var1
$injectedVar
#$disabled
$var2
)