有几种方法可以从脚本中以其他用户身份运行程序或脚本:
内置命令行应用程序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\User 和Password 分别替换为您要运行的用户及其密码。
此脚本现在将以上面指定的用户身份运行。
但是,您可能不愿意或无法使用 PowerShell 脚本,因此您的最后一个解决方案依赖于第三方应用程序,例如:
SysInternals PsExec
PsExec 是一个完全免费的工具,可在 TechNet 上下载,专为在远程计算机上运行命令、应用程序等而设计。不管你信不信,它在本地机器上运行得非常好,它允许你指定你希望应用程序运行的特定用户(和密码!)。
- Download and extract the application
- 将应用程序放在
PATH 属性中的某个位置(SET PATH=C:\PsExec;%PATH% 有效,如果您将其安装到 C:\PsExec)
- 运行命令
psexec -u DOMAIN\user -p password script.ps1 并进行适当的更改。