Vous l'avez vu dans le titre je voudrais utiliser powershell a distance.
J'ai essayé d'utiliser les sockets et le subprocess mais je ne peux que executer commandes par commandes
et non toute l'interface powershell.
Et aussi un autre probleme c'est que le subprocess utilise cmd.exe et non powershell je suis donc obligé de taper powershell au debut de chaque commande.(ligne 34).
Avez vous des idées ?
voici les codes:
le serveur
import socket
import os
SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5003
BUFFER_SIZE = 1024 * 128
SEPARATOR = "<sep>"
s = socket.socket()
s.bind((SERVER_HOST, SERVER_PORT))
s.listen(5)
print(f"Listening as {SERVER_HOST}:{SERVER_PORT} ...")
client_socket, client_address = s.accept()
print(f"{client_address[0]}:{client_address[1]} Connected!")
cwd = client_socket.recv(BUFFER_SIZE).decode("utf8")
print("[+] Current working directory:", cwd)
while True:
command = input(f"{cwd} $> ")
if not command.strip():
continue
elif command == "clear":
os.system('cls')
continue
elif command.lower() == "exit":
client_socket.send(command.encode("utf8"))
break
else:
command = f"powershell {command}"
client_socket.send(command.encode("utf8"))
output = client_socket.recv(BUFFER_SIZE).decode("utf8")
results, cwd = output.split(SEPARATOR)
print(results)
et le client
import socket
import os
import subprocess
SERVER_HOST = "localhost"
SERVER_PORT = 5003
BUFFER_SIZE = 1024 * 128 # 128KB max size of messages, feel free to increase
SEPARATOR = "<sep>"
s = socket.socket()
s.connect((SERVER_HOST, SERVER_PORT))
cwd = os.getcwd()
s.send(cwd.encode("utf8"))
while True:
command = s.recv(BUFFER_SIZE).decode("utf8")
splited_command = command.split()
if command.lower() == "exit":
break
if splited_command[0].lower() == "cd":
try:
os.chdir(' '.join(splited_command[1:]))
except FileNotFoundError as e:
output = str(e)
else:
output = ""
else:
output = subprocess.getoutput(command)
cwd = os.getcwd()
message = f"{output}{SEPARATOR}{cwd}"
s.send(message.encode("utf8"))
s.close()
subprocess devrait fonctionner, voici un exemple ci-dessous,
import subprocess
# exemple de commande Get-Service | Where-Object {$_.Status -eq 'Running'}
commands = ["Get-Service", "Where-Object {$_.Status -eq 'Running'}"]
# Enregistrement dans l'ordre des résultats de la commande dans stdout
result = subprocess.run(["powershell.exe", *commands], capture_output=True)
# Affichage de la sortie
print(result.stdout.decode())
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
commands n'est pas une chaîne de caractères mais une liste de chaîne de caractères, faîtes bien la distinction en lisant des tutoriels si besoin.
notez l'étoile à côté de commands pour récupérer l'ensemble des éléments de la liste
EDIT: Si vous souhaitez une commande, alors remplacez la liste par une chaîne de caractères (avec input si vous souhaitez) et retirer l'étoile.
EDIT2 : Pour le problème d'encodage, enregistrer le script avec l'encodage UTF-8 ou remplacer les caractères encodés qui ne passent pas... tester peut-être sans la méthode decode, je ne suis pas sur Windows
- Edité par fred1599 19 janvier 2023 à 13:10:02
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Ton problème est lié à l'encodage de ton fichier, tu peux modifier son encodage en "utf-8" par exemple... et comme tu es sur Windows, je ne sais pas comment faire. Peut-être en sauvegardant et la possibilité de spécifier l'encodage en UTF-8, j'entends souvent parler de NotePad ++
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)