2

我在使用 pywinrm 模块的 Python 代码中遇到了一个奇怪的问题。让我解释一下。我有一个 Linux 服务器,我在其中启动以下 python 脚本:

import winrm

"""Create security group"""
s = winrm.Session('https://servername:5986/wsman', 
   auth=(None, None), transport='kerberos', 
   server_cert_validation='ignore')

name = "test"
path = "OU=Security Groups,DC=test,DC=org"

ps_command = 'New-ADGroup -Name "{0}" 
-GroupScope Universal 
-GroupCategory Security 
-Path "{1}" -Server ldap.test.org'.format(name, path)

r = s.run_ps(ps_command)

if r.status_code == 0 :
    print(r.std_out.decode('UTF-8'))
else:
    print(r.std_err('UTF-8'))

这将连接到 Windows 服务器(不是 DC)的 HTTPS 侦听器,然后启动组创建命令。

当我直接在 Windows 服务器上启动 AD cmdlet 时,它运行良好,并且在 AD 中创建了安全组。但是通过脚本,我得到以下响应:

$ python3 test_winrm.py
New-ADGroup : Unable to contact the server. This may be because this server does not exist, it is currently down,
or it does not have the Active Directory Web Services running.
At line:1 char:1
+ New-ADGroup -Name "test" -GroupScope Universal -GroupCategory Security
-Path "O ...
+ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo          : ResourceUnavailable: (:) [New-ADGroup], ADServer
DownException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirector
y.Management.Commands.NewADGroup

我还想注意,如果我用一个基本命令替换当前的 PowerShell 命令(例如,在 Windows 服务器上创建一个文件夹),它就可以工作。

因此,即使安装了 RSAT,它也可以在本地 Windows 服务器上运行,但不能与 AD cmdlet 一起使用......您以前有过这个主题的经验吗?

谢谢您的帮助。

4

1 回答 1

1

非常感谢@BenH 的帮助,您对我的问题的根源是正确的,经过几天/头痛后,我终于在这里找到了解决方案:https ://github.com/diyan/pywinrm/issues/58 。使用 kerberos 和 pywinrm 时,您必须设置kerberos_delegation=True多跳支持。

于 2017-09-27T15:35:39.583 回答