PowerShell - 使用不同的凭据创建新实例

时间:2012-04-11 08:44:05

标签: powershell powershell-v2.0

我想用不同的用户凭据从我的脚本中创建一个新的PowerShell实例。 我的想法是在这个脚本部分做一些具有不同凭据的管理员。我想用普通用户权限执行主要部分。

想法,但没有工作:

$script= {$InScript = Get-Process}

$pp= get-credential

[System.Diagnostics.Process]::Start( "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe", "-command $script", $pp.UserName.Split('\')[1] , $pp.Password , $pp.UserName.Split('\')[0] )

[System.Diagnostics.Process]::Start( "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe", "-command $script", $pp.UserName.Split('\')[1] , $pp.Password , $pp.UserName.Split('\')[0] )


$InScript

使用start命令在两行中出现异常:

  

使用“5”参数调用“Start”的异常:“目录名称为   无效“

当我使用管理员权限执行脚本时,它的工作正常。

1 个答案:

答案 0 :(得分:1)

您可以使用.net:

$pp= get-credential # as domain\username and password

[System.Diagnostics.Process]::Start( "powershell.exe", "-command $script", $pp.UserName.Split('\')[1] , $pp.Password , $pp.UserName.Split('\')[0] )

这是::Start方法的构造函数:

::Start(string fileName, string arguments, string userName, System.Security.SecureString password, string domain)

评论后编辑:

尝试将完整路径放到exe:

[System.Diagnostics.Process]::Start( "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", "-command $script", $pp.UserName.Split('\')[1] , $pp.Password , $pp.UserName.Split('\')[0] )

或使用start-process:

start-process -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Credential $pp -ArgumentList $script