如何从Windows命令提示符处将PowerShell脚本作为特定用户调用?

时间:2014-08-11 16:02:06

标签: batch-file powershell command-line cmd

当我以用户名为' abc'的方式登录计算机时运行PowerShell脚本该脚本以用户' abc'。

的形式运行

我在cmd中运行的命令是:

powershell pshell.ps1

如何使用特定域用户(当前登录用户除外)运行PowerShell脚本?

我的目的是通过Windows命令行运行PowerShell脚本。

3 个答案:

答案 0 :(得分:15)

有几种方法可以在脚本中以另一个用户身份运行程序或脚本:

内置命令行应用程序RUNAS

如果您能够指定凭据,Windows命令行RUNAS命令看起来就像是一个很好的解决方案。

RUNAS  /user:user@domain.microsoft.com "powershell pshell.ps1"

然而,正如您所说,您需要从CONTROL-M运行此任务,因此这是不可能的。然后也不可能像我在评论中建议的那样从任务计划程序运行任务,而另一个答案已经建议。

因此,我的下一个建议是使用PowerShell脚本执行此操作:

PowerShell scriptlet 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\UserPassword替换为您要运行的用户和他们的密码,分别。

此脚本现在将以上面指定的用户身份运行。

但是,您可能不愿意或无法使用PowerShell脚本,因此您的上一个解决方案位于第三方应用程序中,例如:

SysInternals PsExec

PsExec是一个完全免费的工具,可以在TechNet上下载,专门用于在远程计算机上运行命令,应用程序等。它在本地计算机上运行非常好,不管您信不信,它允许您指定您希望应用程序运行的特定用户(和密码!)。

  1. Download and extract the application
  2. 将应用程序放在PATH属性中的某个位置(SET PATH=C:\PsExec;%PATH%可以正常工作,如果您将其安装到C:\ PsExec中)
  3. 使用适当的更改运行命令psexec -u DOMAIN\user -p password script.ps1

答案 1 :(得分:4)

如果计划运行在计划任务中调用PowerShell脚本的批处理文件,则可以使用任务计划程序的安全选项。这就是我如何处理以不同用户身份运行的方式。 Scheduled Tasks Security Options

至于从批处理文件调用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提示。这是设计的。