1. 程式人生 > 實用技巧 >Python Tricks —— 使用 pywinrm 遠端控制 Windows 主機

Python Tricks —— 使用 pywinrm 遠端控制 Windows 主機

  • 啟用 WinRM 遠端服務:winrm quickconfig
  • 很多人學習python,不知道從何學起。
    很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
    很多已經做案例的人,卻不知道如何去學習更加高深的知識。
    那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!
    QQ群:1097524789

  • 檢視 WinRM 服務監聽狀態:winrm e winrm/config/listener

    C:\Windows\system32>winrm e winrm/config/listener
    Listener [Source="GPO"]
        Address = *
        Transport = HTTP
        Port = 5985
        Hostname
        Enabled = true
        URLPrefix = wsman
        CertificateThumbprint
        ListeningOn = 127.0.0.1, 169.254.52.7, xx.xx.xx.xx, ::1, fe80::3989:dd91:e6b3:6f41%15, fe80::fd01:a9fd:c410:3407%12
    
  • 允許使用 Basic 認證方式:winrm set winrm/config/service/auth @{Basic="true"}

    winrm set winrm/config/service/auth @{Basic="true"}
    Auth
        Basic = true [Source="GPO"]
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    
  • 允許 WinRM 使用非加密的連線:winrm set winrm/config/service @{AllowUnencrypted="true"}

方式二:bat 指令碼

call winrm quickconfig -quiet
call winrm set winrm/config/service/auth @{Basic="true"}
call winrm set winrm/config/service @{AllowUnencrypted="true"}

方式三:組策略

定位到計算機配置->策略->管理模板->Windows 元件->Windows 遠端管理(WinRM)->WinRM 服務

啟用允許通過 WinRM 進行遠端伺服器管理允許基本身份驗證允許未加密通訊

建議同時啟用服務與防火牆策略:

計算機配置->策略->Windows 設定->安全設定->系統服務->Windows Remote Management (WS-Management),啟動模式為自動。

計算機配置->策略->Windows 設定->安全設定->高階安全 Windows 防火牆->高階安全 Windows 防火牆 - XXX->入站規則,開放 5985(HTTP)和 5986(HTTPS)埠。

二、Python 使用 pywinrm 連線 WinRM 服務

安裝 pywinrm 庫:pip install pywinrm

執行 cmd 命令:

>>> import winrm
>>> session = winrm.Session('xx.xx.xx.xx', auth=('Administrator', 'admin_password'))
>>> cmd = session.run_cmd('ipconfig')
>>> cmd.std_out
b'\r\nWindows IP Configuration\r\n\r\n\r\nEthernet adapter \xd2\xd4\xcc\xab\xcd\xf8:\r\n\r\n   Connection-specific DNS Suffix  . : example.com\r\n   Link-local IPv6 Address . . . . . : fe80::3989:dd91:e6b3:6f41%15\r\n   IPv4 Address. . . . . . . . . . . : xx.xx.xx.xx\r\n   Subnet Mask . . . . . . . . . . . : 255.255.255.0\r\n   Default Gateway . . . . . . . . . : 172.20.23.254\r\n\r\nEthernet adapter \xd2\xd4\xcc\xab\xcd\xf8 2:\r\n\r\n   Media State . . . . . . . . . . . : Media disconnected\r\n   Connection-specific DNS Suffix  . : \r\n'

執行 Powershell 命令:

>>> import winrm
>>> session = winrm.Session('xx.xx.xx.xx', auth=('Administrator', 'admin_password'))
>>> ps = session.run_ps('Get-Disk')
>>> ps.std_out
b'\r\nNumber Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition \r\n                                                                                                             Style     \r\n------ ------------- -------------                    ------------         -----------------      ---------- ----------\r\n0      ST500DM002...             Z3TFS1S3             Healthy              Online                  465.76 GB MBR       \r\n\r\n\r\n'