【问题标题】:Starting external application from Powershell under System account在系统帐户下从 Powershell 启动外部应用程序
【发布时间】:2015-02-21 00:51:28
【问题描述】:

我需要执行将在系统用户帐户下运行的应用程序(powershell 本身在具有管理员权限的标准用户帐户下运行)。我尝试了使用自定义凭据的 Start-Process cmdlet:

$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("system", (ConvertTo-SecureString -String "" -AsPlainText -Force))
Start-Process -Credential $cred "app.exe"

但我有两个问题。首先,我无法在没有或使用空白密码的情况下创建凭证对象(系统用户没有任何密码),当我使用任何密码的凭证时,我会收到密码不正确的错误消息。任何想法如何做到这一点?

顺便说一句,我不能为此使用 psexec。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我认为使用 powershell 是不可能的。你可以尝试使用at(dos命令):

    at TIME /interactive app.exe
    

    其中TIME 是启动进程时的小时hh.mm...

    【讨论】:

      【解决方案2】:

      你可以使用Invoke-TokenManipulation.ps1脚本:

      此脚本需要管理员权限。它可以枚举可用的登录令牌并使用它们来创建新进程。这允许您使用 其他用户通过使用他们的登录令牌创建一个进程来通过网络提供凭据。这甚至适用于 Windows 8.1 LSASS 保护。

      复制粘贴它或与您的脚本一起保存为Invoke-TokenManipulation.ps1 并使用点源加载:

      $ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
      . (Join-Path -Path $ScriptDir -ChildPath 'Invoke-TokenManipulation.ps1')
      

      然后你就可以使用Invoke-TokenManipulation函数了。

      例子:

      # Spawns cmd.exe as SYSTEM.
      Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authority\system"
      

      【讨论】:

        猜你喜欢
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多