我想用不同的用户凭据从我的脚本中创建一个新的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”的异常:“目录名称为 无效“
当我使用管理员权限执行脚本时,它的工作正常。
答案 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