Start-Process inside start-process 作为不同的用户
Start-Process inside start-process as different user
我正在尝试从 installshield 安装文件传递参数,我做错了什么?
$STExecute = "C:\Files\setup.exe"
$STArgument = '/s /f2"c:\windows\setuplogs\inst.log"'
Start-Process Powershell.exe -Credential "Domain\userTempAdmin" `
-ArgumentList "-noprofile -command &{Start-Process $($STExecute) $($STArgument) -verb runas}"
我收到错误消息,如您所见,它删除了双引号,这是必须存在的,我什至无法让它在第二个启动过程中传递 /s 参数:
Start-Process : A positional parameter cannot be found that accepts argument '/f2c:\windows\setuplogs\dmap110_inst.log'
发生这种情况是因为内部实例将 /s
和 /f2"c:\windows\setuplogs\inst.log"
视为两个 单独的 位置参数。您需要用引号将内部 Start-Process
的参数括起来。我还建议使用 splatting 来更容易理解正在发生的事情:
$STExecute = "C:\Files\setup.exe"
$STArgument = '/s /f2"c:\windows\setuplogs\inst.log"'
$SPArgs = @{
FilePath = 'powershell.exe'
ArgumentList = "-noprofile -command Start-Process '{0}' '{1}' -Verb runas" -f
$STExecute, $STArgument
}
Start-Process @SPArgs
我在这里也使用了 format operator,因为它允许我们在不使用子表达式的情况下注入值。只要 $STArgument
中没有单引号,或者你正确地转义了它们(在这种情况下,每个引号有四个引号 ''''
),它应该适合你。
我正在尝试从 installshield 安装文件传递参数,我做错了什么?
$STExecute = "C:\Files\setup.exe"
$STArgument = '/s /f2"c:\windows\setuplogs\inst.log"'
Start-Process Powershell.exe -Credential "Domain\userTempAdmin" `
-ArgumentList "-noprofile -command &{Start-Process $($STExecute) $($STArgument) -verb runas}"
我收到错误消息,如您所见,它删除了双引号,这是必须存在的,我什至无法让它在第二个启动过程中传递 /s 参数:
Start-Process : A positional parameter cannot be found that accepts argument '/f2c:\windows\setuplogs\dmap110_inst.log'
发生这种情况是因为内部实例将 /s
和 /f2"c:\windows\setuplogs\inst.log"
视为两个 单独的 位置参数。您需要用引号将内部 Start-Process
的参数括起来。我还建议使用 splatting 来更容易理解正在发生的事情:
$STExecute = "C:\Files\setup.exe"
$STArgument = '/s /f2"c:\windows\setuplogs\inst.log"'
$SPArgs = @{
FilePath = 'powershell.exe'
ArgumentList = "-noprofile -command Start-Process '{0}' '{1}' -Verb runas" -f
$STExecute, $STArgument
}
Start-Process @SPArgs
我在这里也使用了 format operator,因为它允许我们在不使用子表达式的情况下注入值。只要 $STArgument
中没有单引号,或者你正确地转义了它们(在这种情况下,每个引号有四个引号 ''''
),它应该适合你。