Je voulais savoir s'il était possible d'utiliser New-PsSession
y Invoke-Command
à un serveur exchange en utilisant uniquement python ? Je fais des tests et je ne veux pas utiliser le système de gestion des données. subprocess
mais je voulais plutôt savoir s'il existe des modules python capables de gérer les commandes powershell vers un serveur distant ?
Je l'utilise généralement pour me connecter au serveur d'échange dans powershell :
$password = ConvertTo-SecureString "SOMEPASSWORD" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("ENTEREMAILHERE", $password)
$ses = New-PSSession -Name "ENTEREMAILHERE" -ConnectionUri https://exchange.intermedia.net/powershell -ConfigurationName Hosting.PowerShell -Credential $Cred -Authentication Basic
Ce que j'ai essayé
J'ai essayé de trouver des modules sur Google et je suis tombé sur deux modules différents, mais ils ne semblent pas fonctionner pour moi.
J'ai essayé d'utiliser pypsrp
mais je ne pense pas avoir été capable de le configurer correctement
from httpx import BasicAuth
from pypsrp.powershell import PowerShell, RunspacePool
from pypsrp.wsman import WSMan
wsman = WSMan("https://exchange.intermedia.net/powershell", username="enteremail",
password="enterpassword",
auth="basic")
with RunspacePool(wsman) as pool:
ps = PowerShell(pool)
ps.add_cmdlet("Get-PSDrive").add_parameter("Name", "C")
ps.invoke()
# we will print the first object returned back to us
print(ps.output[0])
J'obtiens une erreur disant :
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='https', port=443): Max retries exceeded with url: //exchange.intermedia.net/powershell:5986/wsman (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002449336F610>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
Je sais que l'url fonctionne car je l'utilise avec powershell tous les jours.
Edit : Après avoir parlé avec @briantist j'ai essayé :
wsman = WSMan("exchange.intermedia.net", username="EMAILHERE",
password="PASSWORHERE",
auth="basic",
port=443,
path="powershell")
et il semblait que ça allait marcher mais ensuite ça a échoué avec :
Code: 2150858811, Machine: exchange.intermedia.net, Reason: The WS-Management service cannot process the request. The resource URI (http://schemas.microsoft.com/powershell/Microsoft.PowerShell) was not found in the WS-Management catalog.
Je suppose que c'est parce que le https://
n'était pas là, alors j'ai essayé avec le https://
et il a donné la même erreur que précédemment en disant :
requests.exceptions.ConnectionError:
HTTPSConnectionPool(host='https', port=443): Max retries exceeded
with url: //exchange.intermedia.net:443/powershell (Caused by
NewConnectionError('<urllib3.connection.HTTPSConnection object at
0x0000020759047AC0>: Failed to establish a new connection: [Errno
11001] getaddrinfo failed'))