当我以用户名为' abc'的方式登录计算机时运行PowerShell脚本该脚本以用户' abc'。
的形式运行我在cmd中运行的命令是:
powershell pshell.ps1
如何使用特定域用户(当前登录用户除外)运行PowerShell脚本?
我的目的是通过Windows命令行运行PowerShell脚本。
答案 0 :(得分:15)
有几种方法可以在脚本中以另一个用户身份运行程序或脚本:
RUNAS
如果您能够指定凭据,Windows命令行RUNAS
命令看起来就像是一个很好的解决方案。
RUNAS /user:user@domain.microsoft.com "powershell pshell.ps1"
然而,正如您所说,您需要从CONTROL-M运行此任务,因此这是不可能的。然后也不可能像我在评论中建议的那样从任务计划程序运行任务,而另一个答案已经建议。
因此,我的下一个建议是使用PowerShell脚本执行此操作:
Invoke-Command
首先,您需要启用Win-RM才能使其正常工作。为此,请在提升(即以管理员身份运行)命令提示符下键入以下内容:
winrm /quickconfig
接下来,编写一个包含所需存储凭据的脚本。请注意,这将以纯文本格式存储,因此如果您不愿意这样做,则需要查看使用安全凭据文件。
$username = "DOMAIN\User"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
Invoke-Command -FilePath "C:\Script\To\Execute.ps1" -Credential $cred -Computer localhost
当然,您需要将C:\Script\To\Execute.ps1
替换为要运行的PowerShell脚本的文件路径,并将DOMAIN\User
和Password
替换为您要运行的用户和他们的密码,分别。
此脚本现在将以上面指定的用户身份运行。
但是,您可能不愿意或无法使用PowerShell脚本,因此您的上一个解决方案位于第三方应用程序中,例如:
PsExec是一个完全免费的工具,可以在TechNet上下载,专门用于在远程计算机上运行命令,应用程序等。它在本地计算机上运行非常好,不管您信不信,它允许您指定您希望应用程序运行的特定用户(和密码!)。
PATH
属性中的某个位置(SET PATH=C:\PsExec;%PATH%
可以正常工作,如果您将其安装到C:\ PsExec中)psexec -u DOMAIN\user -p password script.ps1
。答案 1 :(得分:4)
如果计划运行在计划任务中调用PowerShell脚本的批处理文件,则可以使用任务计划程序的安全选项。这就是我如何处理以不同用户身份运行的方式。
至于从批处理文件调用PowerShell脚本,我通常会这样做:
@ECHO OFF
powershell.exe -executionpolicy unrestricted -File "C:\Scripts\Do-Something.ps1"
您可以从powershell /?
获取所有命令行参数。
您可以将其放在.bat
文件中并将其作为计划任务的操作运行;或者您可以将powershell.exe
作为操作,并在计划任务中为其提供-executionpolicy unrestricted -File "C:\Scripts\Do-Something.ps1"
的参数。我更喜欢后者,因为我可以使用更少的脚本文件。
答案 2 :(得分:0)
您是否可以绕过UAC提示?
如果启用了UAC,并且您启动了一个需要从未升级的进程(例如,您以标准用户身份登录)进行提升的进程,则无法绕过UAC提示。这是设计的。