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

use*_*017 5 powershell command-line cmd batch-file

当我作为名为'abc'的用户登录到机器时运行PowerShell脚本时,脚本以用户'abc'运行.

我在cmd中运行的命令是:

powershell pshell.ps1
Run Code Online (Sandbox Code Playgroud)

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

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

Ala*_*ell 15

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

内置命令行应用程序 RUNAS

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

RUNAS  /user:user@domain.microsoft.com "powershell pshell.ps1"
Run Code Online (Sandbox Code Playgroud)

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

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

PowerShell scriptlet Invoke-Command

首先,您需要启用Win-RM才能使其正常工作.为此,请在提升(即以管理员身份运行)命令提示符下键入以下内容:

winrm /quickconfig
Run Code Online (Sandbox Code Playgroud)

接下来,使用所需的存储凭据编写脚本.请注意,这将以纯文本形式存储,因此,如果您不愿意这样做,则需要查看使用安全凭据文件.

$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
Run Code Online (Sandbox Code Playgroud)

当然,你需要替换C:\Script\To\Execute.ps1用的文件路径要运行PowerShell脚本,并更换DOMAIN\UserPassword与用户要运行分别为和密码.

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

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

SysInternals PsExec

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

  1. 下载并解压缩应用程序
  2. 将应用程序放在PATH属性中的某个位置(SET PATH=C:\PsExec;%PATH%如果将其安装到C:\ PsExec,则可以正常工作)
  3. 运行psexec -u DOMAIN\user -p password script.ps1具有适当更改的命令.