我如何'运行''网络服务'?

时间:2011-08-02 11:30:04

标签: command-line permissions runas network-service

我正在尝试将进程作为另一个帐户运行。我有命令:

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

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

我正在尝试做什么?

5 个答案:

答案 0 :(得分:106)

使用SysInternals中的PsExec.exe

e.g。这将打开一个以NETWORK SERVICE运行的新命令提示符:

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

这会将其作为LOCAL SYSTEM运行:

psexec -i -s cmd.exe 

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

另见:

答案 1 :(得分:13)

在任务计划程序中,创建一个任务以在NETWORK SERVICE用户下运行该应用程序。 然后,您可以使用

从命令行运行任务
schtasks /run /TN "taskname"

其中 taskname 是您的任务名称。

答案 2 :(得分:4)

您通常只能通过Windows服务模拟服务帐户,例如this post提及:

  

诀窍是将您的代码作为本地系统运行,然后您可以使用没有密码的相应用户名模拟服务帐户。将代码作为本地系统帐户运行的一种方法是使用下面显示的技术(取自此orginal post)创建命令行shell,并从那里执行程序集。在代码中调用System.Diagnostics.Debugger.Break()可以调试。

     

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

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

接下来是:

c:\sc start testsvc
     

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

c:\sc delete testsvc

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

答案 3 :(得分:0)

我已经测试了

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使用普通控制台它失败了,使用高架控制台它工作正常

答案 4 :(得分:0)

我知道这是一个旧线程,但这是解决此问题的最佳结果,我希望能够使用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"