使用 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 远程配置文件

Powershell在远程计算机上使用命令行参数执行远程exe

使用 powershell 访问远程计算机时出现审计错误

使用 PowerShell 2.0 在远程计算机上运行批处理文件

尝试使用模拟在远程计算机上运行 PowerShell 脚本时“不允许请求的注册表访问”

如何使用 PowerShell 启动/停止远程服务器上的服务 - Windows 2008 并提示输入凭据?