0

我需要执行将在系统用户帐户下运行的应用程序(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 。

4

2 回答 2

0

您可以使用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"
于 2015-02-20T16:13:49.187 回答
0

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

at TIME /interactive app.exe

开始进程TIME的时间在哪里...hh.mm

于 2012-10-03T08:40:42.307 回答