如何在自己的代码中提升已经运行的会话

时间:2015-09-03 08:07:03

标签: powershell batch-file active-directory powershell-v4.0 elevation

我正在编写一个PowerShell脚本,用于配置Active Directory中的一些内容。

我需要以特定用户身份运行它以获得进程的正确权限,目前我通过.bat文件运行.ps1文件,因此我可以选择“以其他用户身份运行”或“以管理员身份运行”。

我试图实现的是,在脚本内部,我将要求用户提供正确的凭据,然后将会话提升为使用输入的用户信用卡运行。

我在我的代码中尝试过使用它:

Start-Process powershell.exe -Credential "TestDomain\Me"

但它只是在当前会话继续运行时打开一个空PS会话。

我想使用此代码来获取用户的信用:

$msg = "Enter your Domain Admin Credentials"; 
$creds = $Host.UI.PromptForCredential($caption,$msg,"","")
$rstusername = $creds.username;    
$rstpassword = $creds.GetNetworkCredential().password 

然后使用$rstusername AND $rstpassword来更改正在运行的脚本凭据。

这甚至可能吗?

1 个答案:

答案 0 :(得分:5)

您可以在其他用户的上下文中运行cmdlet,因为它们允许提供显式凭据(参数-Credential),或者通过Invoke-Command(具有-Credential参数运行它们)。

示例:

$cred = Get-Credential
Invoke-Command -Computer $env:COMPUTERNAME -ScriptBlock {
  # commands here
} -Credential $cred

或者你可以使用这样的东西用不同的凭证重新运行整个脚本:

if (-not $env:USERNAME -eq 'Me') {
  $cred  = Get-Credential
  $param = '-NoLogo', '-File', $MyInvocation.MyCommand.Path
  Start-Process "powershell.exe" -ArgumentList $param -Credential $cred
  exit $LASTEXITCODE
}

# other code here

无法提升当前会话(或“#34;将其移动到不同的上下文”)。