web-dev-qa-db-fra.com

Comment puis-je m'exécuter en tant que "service réseau"?

J'essaie d'exécuter un processus sous un autre compte. J'ai la commande:

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

mais alors cela demande le mot de passe. Cependant, aucun mot de passe n'est défini pour le service réseau.

Est-ce que ce que j'essaie de faire est possible?

69
Exitos

Utilisez PsExec.exe à partir de SysInternals. 

par exemple. cela ouvrira une nouvelle invite de commande en cours d'exécution en tant que NETWORK SERVICE:

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

cela fonctionnera en tant que système local:

psexec -i -s cmd.exe 

Vous pouvez les vérifier en exécutant whoami à partir de l'invite cmd.

Voir également:

100
Rory

Dans le Planificateur de tâches, créez une tâche pour exécuter l'application sous l'utilisateur NETWORK SERVICE . Vous pouvez ensuite l'exécuter à partir de la ligne de commande à l'aide

 schtasks/run/TN "nom_tâche" 

Où nom de la tâche est le nom de votre tâche.

13
mhenry1384

Vous pouvez uniquement emprunter l'identité en tant que compte de service à partir d'un service Windows, comme par exemple this post mentionne:

L'astuce consiste à exécuter votre code en tant que système local et à partir de là, vous pouvez emprunter l'identité des comptes de service à l'aide du nom d'utilisateur approprié, sans mot de passe. Une façon d'exécuter votre code en tant que compte système local consiste à créer un shell de ligne de commande à l'aide de la technique présentée ci-dessous (extraite de ce orginal post ), puis à exécuter votre assembly à partir de là. L'appel de System.Diagnostics.Debugger.Break() dans votre code vous permet de déboguer.

Pour créer un shell de ligne de commande qui s'exécute sous le compte système local, ouvrez une nouvelle fenêtre de ligne de commande et entrez:

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

suivi par:

c:\sc start testsvc

Une nouvelle fenêtre de commande aurait dû s'ouvrir. Dans cette fenêtre, exécutez votre application.exe. Vous constaterez que vous utilisez maintenant le compte d'utilisateur système intégré. Une fois les tests terminés, vous pouvez supprimer le service de test que vous avez créé en entrant:

c:\sc delete testsvc

Si vous essayez de le faire dans votre propre contexte utilisateur, de telles tentatives devraient échouer.

4
Lex Li

Je sais que c’est un vieux fil de discussion, mais c’est le résultat principal de ce problème et je voulais pouvoir exécuter une commande à l’aide de PowerShell sans avoir à installer d’outil supplémentaire sur notre serveur Windows. J'ai créé le script PowerShell suivant qui crée une tâche planifiée, l'exécute puis la supprime. Il est également écrit pour vous permettre d'exécuter la commande sous différents comptes d'utilisateur.

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"
0
kmcbrearty

J'ai testé

PsExec -i -s cmd.exe

et

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

sur PsExec64-v2.2, pour win10-home-x64-10.0.14393 et ​​win10-pro-x64-10.0.15063 pour utiliser la console normale c'est un échec, utilisez la console élevée cela fonctionne

0
color-boy