我正在编写一个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
来更改正在运行的脚本凭据。
这甚至可能吗?
答案 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;将其移动到不同的上下文”)。