使用 PowerShell 在远程计算机上启动监视应用程序时的性能计数器访问
Posted
技术标签:
【中文标题】使用 PowerShell 在远程计算机上启动监视应用程序时的性能计数器访问【英文标题】:Performance counter access when launching monitoring app on remote machine with PowerShell 【发布时间】:2012-05-26 18:05:36 【问题描述】:我有一个 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,可以很容易地使用域的相应 SPN 条目设置允许委派新鲜凭据。所有计算机上的防火墙都配置为启用 WinRM Http-In。我已阅读 about_Remote_Troubleshooting 文档,但无济于事。
关于多跳身份验证是否确实是正确的方法,或者任何其他可能破坏这一点的想法?
【问题讨论】:
任何带有完整源代码的最终解决方案?什么是 Configure-SMRemoting.ps1? 【参考方案1】:我写了那篇博文。而且,是的,从问题的描述来看,它看起来像是一个 CredSSP 身份验证问题。首先,您需要正确的权限来监控性能计数器。当使用远程处理时,如果凭据被委派,则第二个接收请求为 SYSTEM,因此远程系统上的 Invoke-COMmand 产生拒绝访问。
第一个问题是:为什么不在远程系统上使用 Enable-PSremoting? 第二个问题是:您是否将运行 C# 应用程序的本地系统配置为 CredSSP 客户端。
Enable-WSManCredSSP -Role Client -DelegateComputer "*.SP2010lab.com"
这只需要在您用作客户端的计算机上完成。在您使用 Invoke-Command 的系统上,您必须设置 CredSSP 服务器。
Enable-WSManCredSSP -Role Server
你能确认一下吗?
【讨论】:
启用路径遵循 technet 上的建议:technet.microsoft.com/en-us/library/dd759202.aspx。所示的 Enable-WSManCredSSP 步骤与键入的完全相同。我怀疑问题出在我的客户端机器和我试图自动化的服务器之间的 *** 上。目前,我已经在这条道路上打退堂鼓,转而运行脚本,这样就只有单跳身份验证了。谢谢。 已解决。这些机器都是同一个 AD 的一部分,但在不同的 OU 中。一个 OU 禁用了 IPSec,并且不允许在 OU 之外建立连接。这是服务器所在的位置。我的客户端计算机启用了 IPSec,并且位于不同的 OU 中。谢谢!以上是关于使用 PowerShell 在远程计算机上启动监视应用程序时的性能计数器访问的主要内容,如果未能解决你的问题,请参考以下文章
Powershell在远程计算机上使用命令行参数执行远程exe
使用 PowerShell 2.0 在远程计算机上运行批处理文件