Batch file 如何从Windows命令提示符以特定用户身份调用PowerShell脚本?

Batch file 如何从Windows命令提示符以特定用户身份调用PowerShell脚本?,batch-file,powershell,command-line,cmd,Batch File,Powershell,Command Line,Cmd,当我以名为“abc”的用户身份登录到计算机时运行PowerShell脚本,脚本将以用户“abc”的身份运行 我在cmd中运行的命令是: powershell pshell.ps1 如何使用当前登录用户以外的特定域用户运行PowerShell脚本 我的目的是通过Windows命令行运行PowerShell脚本。有几种方法可以从脚本中以其他用户的身份运行程序或脚本: 内置命令行应用程序RUNAS 如果您能够指定凭据,Windows命令行RUNAS命令看起来是解决问题的好方法 RUNAS /use

当我以名为“abc”的用户身份登录到计算机时运行PowerShell脚本,脚本将以用户“abc”的身份运行

我在cmd中运行的命令是:

powershell pshell.ps1
如何使用当前登录用户以外的特定域用户运行PowerShell脚本


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

有几种方法可以从脚本中以其他用户的身份运行程序或脚本:

内置命令行应用程序
RUNAS
如果您能够指定凭据,Windows命令行
RUNAS
命令看起来是解决问题的好方法

RUNAS  /user:user@domain.microsoft.com "powershell pshell.ps1"
但是,正如您所说,您需要从CONTROL-M运行此任务,因此这是不可能的。然后,也不可能像我在评论中建议的那样从任务调度器运行任务,而另一个答案也建议了这一点

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

PowerShell scriptlet
Invoke命令
首先,您需要启用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脚本,因此上一个解决方案依赖于第三方应用程序,例如:

sysexec 是一个完全免费的工具,可在TechNet上下载,专为在远程计算机上运行命令、应用程序等而设计。它在本地机器上运行得非常好,信不信由你,它允许你指定你希望应用程序运行的特定用户(和密码!)

  • 将应用程序放在
    PATH
    属性中的某个位置(
    SET PATH=C:\PsExec;%PATH%
    工作,如果您将其安装到C:\PsExec)
  • 运行命令psexec-u DOMAIN\user-p password script.ps1
  • ,并进行相应的更改
    如果计划在计划任务中运行调用PowerShell脚本的批处理文件,则可以使用任务计划程序的安全选项。这就是我如何处理作为不同用户运行的问题

    对于从批处理文件调用PowerShell脚本,我通常会执行以下操作:

    @ECHO OFF
    powershell.exe -executionpolicy unrestricted -File "C:\Scripts\Do-Something.ps1"
    
    您可以从
    powershell/?
    获取所有命令行参数


    您可以将其放入
    .bat
    文件中,并将其作为计划任务的操作运行;或者,您可以将
    powershell.exe
    作为操作,并将
    -executionpolicy unrestricted-文件“C:\Scripts\Do Something.ps1”
    的参数指定给它。我更喜欢后者,因为我可以玩的脚本文件少了一个。

    你是在问是否可以绕过UAC提示


    如果启用了UAC,并且您启动的流程需要从未提升的流程提升(例如,您以标准用户身份登录),则无法绕过UAC提示。这是出于设计。

    这确实会提示我输入密码。我需要在没有任何密码提示的情况下以特定id运行作业。我的主要动机是通过控件M调度作业,无论我们给它的所有者是什么,它都会以系统的形式运行服务器。因此考虑将命令行本身作为必须运行的id。希望我的要求是现在清除。如果要计划任务在某个时间运行,您应该真正使用任务计划程序,然后可以将“运行方式”指定为选项之一。还有一个
    RUNAS
    开关
    /SAVECRED
    ,它将在您第一次输入凭据后保存凭据。除此之外,我所知道的作为另一个用户运行程序的唯一其他方法是使用外部工具(例如PsExec,它是TechNet上免费提供的系统内部工具)或者直接支持安全字符串的PowerShell…您好,我们正在寻找要在计算机上运行的脚本..好的,让我们简单一点..我以用户身份登录..需要以其他用户的身份使用命令行运行PowerShell脚本。请对此提供任何指针?正如我之前所说,您有Windows命令行应用程序
    RUNAS
    ,有PowerShell的
    Invoke命令
    (我已经给出了这两个命令的工作用法示例),还有外部实用程序,如
    PsExec
    。所有这些都能够完成您提到的简单场景。它们都对我来说很好。但要求是它不应该提示我输入密码。我尝试运行runas命令,但它提示我输入密码,但事实并非如此。那么有没有办法将密码合并到运行方式命令行本身就像一个参数?您好,谢谢您的解决方案。但我的要求是使用控件M,我们不允许使用调度程序。因此,您能建议一个更好的选项吗?当通过控件M运行时,作业由EDAPPS\SYSTEM所有,我们希望它作为一个特定用户。请查看我的最新答案以查看如果对你有用的话。