我已经编写了我的第一个PowerShell脚本来创建用于Oracle身份验证的Active Directory对象。当使用专门为此目的创建的用户凭据通过计划任务运行时,它可以完美地工作。但是,当通过WinRM远程执行时(从Ansible使用pywinrm模块),它总是失败:
PS>TerminatingError(New-ADUser): "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."
根据this very informative blog post中的建议,我在脚本中添加了一个Get-ADDomainController -Discover -Service ADWS
,它可以正确识别运行Active Directory Web服务的多个域控制器之一。我还尝试了Test-NetConnection <DC> -port 9389
建议,DC(s)在该端口上是可访问的。
你知道这里可能出了什么问题吗?或者下一步我可以采取什么诊断步骤?我和我的Windows同事被困在这里。
1条答案
按热度按时间5anewei61#
计划任务运行的PowerShell版本是否与为WinRM配置的版本不同?如果WinRM使用的PowerShell版本恰好运行PowerShell 7.4预览版5或6,则这是最近在预览版5中出现的问题(上周发布的预览版6中也存在):
该问题似乎导致大多数Get-ADxxxx命令返回您列出的错误。
其中一个帖子提到了包含.NET版本的问题,并且:“* 将在net 8 rc 2推出和dashsh随其发货时得到修复。*”-但不幸的是,它没有给予时间。
在帖子中看到的一种解决方法是使用“-Server”参数并指定域控制器(DC)的IP地址与名称(这强制使用NTLM而不是NTFS)。我可以确认这是有效的,但不建议...因为在脚本中硬编码DC,以及使用IP地址与DNS名称,是非常糟糕的做法,并设置脚本在未来失败。