【问题标题】:Running Command as Administrator from a SYSTEM Process从 SYSTEM 进程以管理员身份运行命令
【发布时间】:2017-01-26 09:58:37
【问题描述】:

所以我需要清除用户的运行对话框历史记录,我可以在已登录用户计算机上的提升的 powershell 窗口中使用“reg delete HKEY_CURRENT_USER\Software\Windows 等...”完美地完成,但我是什么要做的是相同的命令,但来自 SYSTEM powershell 进程。我已经使用 psexec 创建了一个作为 SYSTEM 运行的 powershell 窗口,但是因为您不能只使用 HKEY_CURRENT_USER 作为 SYSTEM 并获得相同的结果,所以我发现它非常困难。如果我可以以用户名\管理员身份运行该命令,那么我就不会遇到这个问题。

还要注意,如果我能以某种方式以纯文本形式在一行中获取已登录用户的用户名(仍然来自 SYSTEM)(看不到其他输出),那么我可以将用户名存储在一个变量中并转换到 SID 并改用 HKEY_USERS。

附:不要问我为什么以 SYSTEM 身份运行 powershell,我知道我在做什么:D

【问题讨论】:

  • 你看过港大分行吗?它包含所有用 SID 值标识的用户注册表。当然,Sysinternals 有一个工具,可以将 SID 转换为人类可读的帐户名称,反之亦然。

标签: powershell registry system administrator


【解决方案1】:

您可以在系统上下文powershell下使用get-process并过滤explorer.exe进程运行的位置,获取它正在运行的帐户,然后用于转换为SID并通过注册表。

【讨论】:

  • 抱歉,您能否提供一个可行的示例,我不知道该怎么做,但听起来肯定可以。
【解决方案2】:

假设只有 1 个 explorer.exe 进程正在运行,这是 Windows 客户端操作系统的常态。

$proc = Get-CimInstance Win32_Process -Filter "name = 'explorer.exe'"
$owner = Invoke-CimMethod -InputObject $proc -MethodName GetOwner
$username = $owner.user

$username 将包含用户,$owner 还将包含域和其他一些内容。

转换为 sid

$objUser = New-Object System.Security.Principal.NTAccount($owner.Domain, $owner.User) 
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) 
$strSID.Value

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 2013-02-15
    • 2012-04-18
    • 2011-08-22
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多