我需要执行将在系统用户帐户下运行的应用程序(powershell本身在具有管理员权限的标准用户帐户下运行)。我尝试使用自定义凭据启动进程cmdlet:
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("system", (ConvertTo-SecureString -String "" -AsPlainText -Force))
Start-Process -Credential $cred "app.exe"
但我有两个问题。首先,我无法创建凭证对象,或者使用空白密码(系统用户没有任何密码),当我使用凭证只有任何密码时,我会收到密码错误的错误消息。任何想法如何做到这一点?
顺便说一下,我不能用psexec。
答案 0 :(得分:0)
我认为使用PowerShell是不可能的。您可以尝试使用at
(dos命令):
at TIME /interactive app.exe
其中TIME
是开始流程时的小时hh.mm
...
答案 1 :(得分: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"