我有一个C#进程,作为其角色的一部分从一组Windows Server 2008R2计算机读取性能计数器。所有计算机都位于公司AD域中并位于同一网络中。如果我登录到服务器计算机并从我的登录会话中运行C#进程,则此程序可以正常工作。我现在正试图使用PowerShell的这个C#进程自动化一些实验。目标是从我的桌面远程在其中一台服务器上启动它。所有计算机都在同一个域(桌面和服务器)。
所有机器都设置为:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Configure-SMRemoting.ps1 -force -enable
powershell脚本正在创建一个PsSession来连接到运行C#进程的机器,并使用invoke-command启动它。但是,远程主机上的C#应用程序无法再访问其监视的机器上的性能计数器: - “访问被拒绝”。
怀疑这是一个多跳身份验证问题,我按照这些说明http://www.ravichaganti.com/blog/?p=1230启用了多跳身份验证。试图使用CredSSP:
$cred = Get-Credential -Credential "Company\user"
$session = new-pssession -ComputerName $loadHost -Credential $cred -Authentication CredSSP -ErrorAction Stop
收率:
连接到远程服务器失败,并显示以下错误消息: WinRM客户端无法处理请求。 CredSSP身份验证是 目前在客户端配置中已禁用。更改客户端 配置并再次尝试请求。 CredSSP身份验证必须 也可以在服务器配置中启用。此外,组策略必须 编辑以允许凭证委派到目标计算机。使用 gpedit.msc并查看以下策略:计算机配置 - > 管理模板 - >系统 - >凭证授权 - >允许 委派新证书。验证它是否已启用 配置适合目标计算机的SPN。对于 例如,对于目标计算机名称“myserver.domain.com”,SPN可以 是以下之一:WSMAN / myserver.domain.com或 WSMAN / * .domain.com有关详细信息,请参阅 about_Remote_Troubleshooting帮助主题。
使用gpedit.msc,显式允许委派Fresh Credentials,并使用相应的域的SPN条目进行设置。所有计算机上的防火墙都配置为启用WinRM Http-In。我读过about_Remote_Troubleshooting文档无济于事。
关于多跳认证确实是正确的方法,还是其他任何可能打破这种做法的想法?
答案 0 :(得分:1)
我写了这篇博文。并且,是的,从问题的描述来看,它看起来像CredSSP身份验证问题。首先,您需要正确的权限来监控性能计数器。使用远程处理时,如果委派凭据,则第二个接收请求作为SYSTEM,因此远程系统上的Invoke-COmmand将拒绝访问。
第一个问题是:为什么不在远程系统上使用Enable-PSremoting? 第二个问题是:您是否配置了C#应用程序作为CredSSP客户端运行的本地系统。
Enable-WSManCredSSP -Role Client -DelegateComputer "*.SP2010lab.com"
这只需要在您作为客户端使用的计算机上完成。在使用Invoke-Command的系统上,必须设置CredSSP服务器。
Enable-WSManCredSSP -Role Server
你能确认吗?