13

编辑::::查看当前问题的最底部。

在当前设置中,批处理文件调用具有以下内容的 powershell 脚本

powershell D:\path\powershellScript.v32.ps1 arg1 arg2 arg3 arg4

我想将其转换为调用另一个 powershell 的 powershell 脚本。但是,我在使用启动过程时遇到问题。这是我目前拥有的,但在执行时我得到以下

No application is associated with the specified file for this operation

这是正在执行的 powershell

$powershellDeployment = "D:\path\powershellScript.v32.ps1"
$powershellArguments = "arg1 arg2 arg3 arg4"
Start-Process $powershellDeployment -ArgumentList $powershellArguements -verb runas -Wait

编辑::::::

由于下面的帮助,我现在有以下

$username = "DOMAIN\username"
$passwordPlainText = "password"     
$password = ConvertTo-SecureString "$passwordPlainText" -asplaintext -force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $username,$password

$powershellArguments = "D:\path\deploy.code.ps1", "arg1", "arg2", "arg3", "arg4"
Start-Process "powershell.exe" -credential $cred  -ArgumentList $powershellArguments

但是,当我从远程计算机执行此脚本时,我收到“拒绝访问”错误,即使使用的用户名具有对计算机的完全管理员访问权限

4

2 回答 2

21

您应该使用Start-Process powershell.exe, 并将脚本的路径作为-Filearg 列表中的参数传递。该No application...位意味着您没有设置默认应用程序来处理计算机上的 .ps1 文件。如果您Right Click -> Open With -> Select Application -> check "Use this program as default..."对任何 .ps1 文件执行完整的花絮,那么该消息就会消失。我的默认程序是记事本,所以当我Start-Process在 .ps1 上使用时,它会在其中弹出。

编辑:

把它们放在一起...

Start-Process powershell.exe -ArgumentList "-file C:\MyScript.ps1", "Arg1", "Arg2"

或者,如果你定义$powershellArguments为 Keith 所说的 ( $powershellArguments = "-file C:\MyScript.ps1", "arg1", "arg2", "arg3", "arg4"),那么就像这样:

Start-Process powershell.exe -ArgumentList $powershellArguments
于 2012-08-20T16:34:00.880 回答
7

改变这个:

$powershellArguments = "arg1 arg2 arg3 arg4"

$powershellArguments = "arg1", "arg2", "arg3", "arg4"

-ArgumentList参数需要一个参数数组 - 而不是包含所有参数的单个字符串。

于 2012-08-20T16:20:07.083 回答