如何“作为”“网络服务”运行?


83

我试图以另一个帐户的身份运行一个进程。我有命令:

runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"

但这会要求输入密码。但是,没有为网络服务设置密码。

我想做的事可能吗?

Answers:


124

使用SysInternals中的PsExec.exe,从提升的命令提示符下运行。

例如,这将打开一个作为网络服务运行的新命令提示符:

psexec -i -u "nt authority\network service" cmd.exe 

这将其作为本地系统运行:

psexec -i -s cmd.exe 

您可以通过whoami在cmd提示符下运行来验证这些内容。

也可以看看:


@stej-不适合我。尝试从提升权限的命令提示符下运行它,即以管理员身份运行命令提示符。
罗里2015年

不知道,psexec版本是2.11。我还通过提升的控制台在作为Azure云服务运行的winserver 2012上进行了尝试,但仍然要求输入密码。
stej 2015年

也要求我输入密码。
安德森·福塔雷萨

1
这似乎在64位计算机上不起作用。一种解决方法是改用devxexec,它确实起作用。
mellamokb 2015年

3
@罗里:我想我明白了。对于网络服务(至少在Azure角色中),您似乎必须指定cmd.exe的完整确切路径。由于某种原因,它没有默认的PATH变量或其他内容……
mellamokb

15

在“任务计划程序”中,创建一个任务以在“网络服务”用户下运行该应用程序。然后,您可以使用以下命令从命令行运行任务

schtasks / run / TN“任务名”

其中taskname是您的任务的名称。


如何使用nt Authority \ localservice创建此任务?
Cobaia 2013年

可以将mmc.exe作为localservice运行吗?
Cobaia 2013年

6

通常,您只能从Windows服务模拟为服务帐户,例如这篇文章中提到的:

诀窍是将代码作为本地系统运行,然后您可以使用没有密码的适当用户名来模拟服务帐户。一种将代码作为本地系统帐户运行的方法是,使用以下所示的技术(从本原始帖子中摘录)创建命令行外壳,然后从那里执行程序集。调用System.Diagnostics.Debugger.Break()代码可以进行调试。

要创建在本地系统帐户下运行的命令行外壳,请打开一个新的命令行窗口并输入:

c:\sc create testsvc binpath= "cmd /K start" type= own type= interact

其次是:

c:\sc start testsvc

应该会打开一个新的命令窗口。在该窗口中运行application.exe-您将看到您现在以内置的System用户帐户身份运行。完成测试后,可以通过输入以下内容删除创建的测试服务:

c:\sc delete testsvc

如果尝试在自己的用户上下文中执行此操作,则此类尝试应失败。


3

我测试过

PsExec -i -s cmd.exe

PsExec -i -u "nt authority\network service" cmd.exe

在PsExec64-v2.2上,对于win10-home-x64-10.0.14393和win10-pro-x64-10.0.15063使用普通控制台会失败,请使用提升的控制台即可正常工作


可以使用“ whoami”命令确认此方法,该命令在cmd.exe和Powershell.exe中均有效。
Tore Aurstad '19

1

我知道这是一个旧线程,但这是解决此问题的最佳方法,我希望能够使用PowerShell运行命令,而不必在Windows Server上安装任何其他工具。我想到了以下PowerShell脚本,该脚本创建计划的任务,运行它,然后将其删除。它也被编写为允许您在不同的用户帐户下运行命令。

function InstallDotNetCoreGlobalTool($PackageId, $Action = "install", $User = "NT AUTHORITY\NETWORK SERVICE", $Password = "")
{
    $TaskName = "AzureDotNetCoreGlobalToolConfiguration"
    $Command = "dotnet.exe"
    $Arguments = "tool $Action -g " + $PackageId
    $TaskAction = New-ScheduledTaskAction -Execute $Command -Argument $Arguments

    Write-Host "Setting up scheduled task to run" $Command $Arguments

    Register-ScheduledTask -TaskName $TaskName -User $User -Action $TaskAction
    Start-ScheduledTask -TaskName $TaskName

    Write-Host ""
    Write-Host "Waiting on scheduled task to complete."

    while ((Get-ScheduledTask -TaskName $TaskName).State  -ne 'Ready') 
    {
      # keep waiting
    }

    Write-Host ""

    If((Get-ScheduledTask $TaskName | Get-ScheduledTaskInfo).LastTaskResult -eq 0)
    {
        Write-Host $PackageId $Action "completed successfully"
    }
    else
    {
        If ($Action -eq "install")
        {
            Write-Host $PackageId "failed to $Action. Ensure the proper dependencies have been installed or that it isn't already installed."
        }
        Else {
            Write-Host $PackageId "failed to $Action. It may not currently be installed."
        }        
    }

    Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}

InstallDotNetCoreGlobalTool "Amazon.Lambda.Tools" "uninstall"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.