簡體   English   中英

如何使用 Powershell 以不同用戶身份運行 Command?

[英]How to run Command as a different user with Powershell?

我正在嘗試制作一個腳本來更改給定 dns 記錄的 HostnameAlias。

但是只有某些用戶有權編輯這些記錄,例如ADMIN可以編輯它而CURRENTUSER不能。

目前我有這段代碼:

param(
    [ValidateNotNull()]
    [System.Management.Automation.PSCredential]
    $Credential = $(Get-Credential)
)
$Command = "Set-DnsServerResourceRecord -NewInputObject $($NewObject) -OldInputObject $($OldObject) -ZoneName $($ZoneName)"
Start-Process -FilePath PowerShell -NoNewWindow -Credential $Credential -ArgumentList $Command

但我只是不斷收到Start-Process : This command cannot be run due to the error: The user name or password is incorrect即使我絕對確定它們確實正確。

我在這里做錯了什么。

Ps,我已經查看了所有相關問題,似乎沒有人回答我的問題。

您可以調用System.Management.Automation.PSCredential對象來指定您想要的任何憑據並在任何進程中使用它運行

$User = 'yourdomain\youruser'
$Password = 'yourpassword'

$Secure_Password = ConvertTo-SecureString $Password -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential($User, $Secure_Password)


$Command = "Set-DnsServerResourceRecord -NewInputObject $($NewObject) -OldInputObject $($OldObject) -ZoneName $($ZoneName)"
Start-Process -FilePath PowerShell -NoNewWindow -Credential $Credential -ArgumentList $Command

你可以使用這個:

#Get User credential
$Credential = Get-Credential Domain\UserNameYouWant

#Use System.Diagnostics to start the process as User
$ProcessInfo = New-Object System.Diagnostics.ProcessStartInfo
#With FileName we're basically telling powershell to run another powershell process
$ProcessInfo.FileName = "powershell.exe"
#CreateNoWindow helps avoiding a second window to appear whilst the process runs
$ProcessInfo.CreateNoWindow = $true
#Note the line below contains the Working Directory where the script will start from
$ProcessInfo.WorkingDirectory = $env:windir
$ProcessInfo.RedirectStandardError = $true 
$ProcessInfo.RedirectStandardOutput = $true 
$ProcessInfo.UseShellExecute = $false
#The line below is basically the command you want to run and it's passed as text, as an argument
$ProcessInfo.Arguments = "The command you want"
#The next 3 lines are the credential for User as you can see, we can't just pass $Credential
$ProcessInfo.Username = $Credential.GetNetworkCredential().username
$ProcessInfo.Domain = $Credential.GetNetworkCredential().Domain
$ProcessInfo.Password = $Credential.Password
#Finally start the process and wait for it to finish
$Process = New-Object System.Diagnostics.Process 
$Process.StartInfo = $ProcessInfo 
$Process.Start() | Out-Null 
$Process.WaitForExit() 
#Grab the output
$GetProcessResult = $Process.StandardOutput.ReadToEnd()
# Print the Job results
$GetProcessResult

只是我的一個錯誤,在輸入憑據時忘記在用戶名之前指定域。

可以這樣解決Get-Credential Domain\\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM