【问题标题】:How can I call a PowerShell script as a particular user from the Windows command prompt?如何从 Windows 命令提示符以特定用户的身份调用 PowerShell 脚本?
【发布时间】:2014-08-11 16:02:06
【问题描述】:

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

我在cmd中运行的命令是:

powershell pshell.ps1

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

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

【问题讨论】:

  • 查看我的最新答案,看看是否适合您。

标签: batch-file powershell command-line cmd


【解决方案1】:

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

内置命令行应用程序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 并进行适当的更改。

【讨论】:

  • 确实会提示我输入密码。我需要在没有任何密码提示的情况下以特定 id 运行作业。我的主要动机是通过控制 M 和我们给它的任何所有者安排一个作业服务器作为 SYSTEM.So 想到在命令行本身中给出它必须运行的 id。希望我的要求现在很清楚。
  • 如果你想安排一个任务在某个时间运行,你真的应该使用任务调度程序,然后你可以指定“运行方式”作为选项之一。还有一个RUNAS 开关/SAVECRED 将在您第一次输入凭据后保存它们。除此之外,我知道以其他用户身份运行程序的唯一其他方法是使用外部工具(例如 PsExec - 这是 TechNet 上免费提供的 SysInternals 工具)或直接支持安全字符串的 PowerShell。
  • ..嗨,我们正在寻找要在机器上运行的脚本..好吧,让它变得简单..我以用户身份登录..并且需要运行 powershell使用命令行作为不同用户的脚本。请对此有任何指示吗?
  • 正如我之前所说,你有 Windows 命令行应用程序 RUNAS,你有 PowerShell 的 Invoke-Command(我已经给出了它们的工作使用示例),你有像 @ 这样的外部实用程序987654339@。所有这些都能够完成你提到的那个简单的场景。
  • 它们对我来说肯定看起来不错。但要求是它不应该提示我输入密码。我尝试运行 runas 命令,但它提示我输入密码,这不应该是这种情况.那么有什么方法可以让我在 RUNAS 命令行本身中加入密码,就像一个参数一样?
【解决方案2】:

如果您计划在计划任务中运行调用 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" 的参数。我更喜欢后者,因为我可以少用一个脚本文件。

【讨论】:

  • 。您好,感谢您的解决方案。但我的要求是使用控件 M,我们不允许使用调度程序。所以您能否建议一个更好的选项。当通过控件 M 运行时,工作是由 EDAPPS\SYSTEM 拥有,我们希望它成为特定用户。
【解决方案3】:

您是在问是否可以绕过 UAC 提示符?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2011-01-16
    • 2013-07-31
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多