Question Exécuter le programme sur un ordinateur distant à l'aide de PowerShell


Comment puis-je exécuter un programme sur une machine distante à l'aide de powershell?


5
2017-10-23 11:16


origine




Réponses:


La nouvelle manière cool de faire ceci est avec WinRM. J'ai vu cette démonstration sur Windows Server 2008 R2, bien qu'il existe un téléchargement avec powershell v2 et WinRM pour d'autres systèmes d'exploitation Windows.

La façon pas si cool (ou nouvelle) de le faire est d'utiliser psexec, ce qui n'est pas PowerShell, mais je suis sûr qu'il existe un moyen de l'invoquer via la syntaxe PowerShell-Esque.


7
2017-10-23 11:42



Juste pour ajouter un peu plus de détails, pour une configuration de test rapide, effectuez un "winrm quickconfig" sur le serveur pour le configurer afin de recevoir les demandes. Utilisez la cmdlet Invoke-Command du client pour envoyer une commande au serveur. - Ameer Deen
Merci pour cette réponse, cela m’a été utile. Après avoir correctement configuré winrm, j’ai été en mesure d’exécuter à distance un fichier bat, j’ai fourni mon code dans la réponse à cette question. - SSH This


Vous pouvez également utiliser WMI et démarrer un processus à distance. Ce ne sera pas interactif et vous devrez avoir confiance que cela se terminera tout seul. Cela ne nécessite rien d'autre sur l'ordinateur distant que des ports ouverts pour WMI.

Function New-RemoteProcess {
    Param([string]$computername=$env:computername,
        [string]$cmd=$(Throw "You must enter the full path to the command which will create the process.")
    )

    $ErrorActionPreference="SilentlyContinue"

    Trap {
        Write-Warning "There was an error connecting to the remote computer or creating the process"
        Continue
    }    

    Write-Host "Connecting to $computername" -ForegroundColor CYAN
    Write-Host "Process to create is $cmd" -ForegroundColor CYAN

    [wmiclass]$wmi="\\$computername\root\cimv2:win32_process"

    #bail out if the object didn't get created
    if (!$wmi) {return}

    $remote=$wmi.Create($cmd)

    if ($remote.returnvalue -eq 0) {
        Write-Host "Successfully launched $cmd on $computername with a process id of" $remote.processid -ForegroundColor GREEN
    }
    else {
        Write-Host "Failed to launch $cmd on $computername. ReturnValue is" $remote.ReturnValue -ForegroundColor RED
    }
}

Exemple d'utilisation:

New-RemoteProcess -comp "puck" -cmd "c:\windows\notepad.exe"

3
2017-11-09 20:40



Je reçois des erreurs à ce sujet et je ne peux pas dire ce qui se passe. Est-il possible d'imprimer l'erreur? - Gabriel Guimarães
Merci. Cela a fonctionné pour moi sur une machine Windows 7. Je n'ai pas encore essayé de l'exécuter sur un serveur, mais je ne vois pas pourquoi cela ne fonctionnerait pas (à moins que le service informatique ne bloque WMI) - bmg002


IciC'est le lien psexec / powershell.


1
2017-10-23 14:15





Assez intéressant, je l’ai utilisé pour exécuter le bloc-notes sur un ordinateur distant et il n’apparaissait pas. J'ai vérifié le gestionnaire de tâches et l'ID de processus que l'appel a renvoyé était bien là!

Windows a déclaré qu'il s'agissait d'un concept de sécurité et que le processus serait exécuté de manière cachée ou en arrière-plan!


1
2017-11-03 14:53





Ce code m'a aidé à exécuter un fichier chauve-souris à distance. J'espère que cela aidera quelqu'un dans le futur. Vous aurez besoin de remplacer les variables cred et ComputerName en haut de ce script.

$Username = "username"
$Password = "password"
$ComputerName = "remote.machine.hostname"
$Script = {C:\test.bat > C:\remotelog 2>&1}

#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

#Create session object with this
$Session = New-PSSession -ComputerName $ComputerName -credential $Cred

#Invoke-Command
$Job = Invoke-Command -Session $Session -Scriptblock $Script -AsJob
$Null = Wait-Job -Job $Job

#Close Session
Remove-PSSession -Session $Session

1
2018-04-15 17:32





RE: la réponse de Nick

Oui, PowerShell v2 (avec WinRM 2.0) est fourni avec Server 2008 R2 et Windows 7. Une version de niveau inférieur devrait bientôt être disponible pour XP, Vista, 2003 et 2008.

Vous avez toujours la possibilité d’utiliser WMI pour exécuter des tâches distantes, mais c’est obligé d’interagir avec la console, ce ne sera pas une méthode viable.


0
2017-10-23 22:28