当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于远程故障排除

作者:精品下载站 日期:2024-12-14 02:19:03 浏览:14 分类:玩电脑

关于远程故障排除


简短描述

描述如何对 PowerShell 中的远程操作进行故障排除。

详细描述

在使用 PowerShell 远程处理之前,请参阅 about_Remote 和 about_Remote_Requirements 以获取有关配置和基本使用的指南。

您必须具有管理权限才能查看或更改 WSMan: 驱动器中本地计算机的设置。这包括对会话配置、受信任主机、端口或侦听器的更改。

您必须使用以管理员身份运行选项运行 PowerShell。

如何以管理员身份运行

对于错误:

错误:访问被拒绝。您需要从提升的进程运行此 cmdlet。

要使用以管理员身份运行选项启动 Windows PowerShell,请右键单击“开始”菜单中的 PowerShell 图标,然后选择以管理员身份运行

如何启用远程处理

对于错误:

  • 错误:访问被拒绝
  • 错误:与远程主机的连接被拒绝。验证 WS-Management 服务是否正在远程主机上运行,并配置为侦听正确端口和 HTTP URL 上的请求。

要接收远程命令,必须在计算机上启用 PowerShell 远程处理。 Windows PowerShell 远程处理在 Windows Server 2012 和更高版本的 Windows Server 上默认启用。您可以运行 Enable-PSRemoting 来重新启用远程处理(如果已禁用)。有关详细信息,请参阅启用 PSRemoting。

如何在企业中启用远程处理

对于错误:

  • 错误:访问被拒绝
  • 错误:与远程主机的连接被拒绝。验证 WS-Management 服务是否正在远程主机上运行,并配置为侦听正确端口和 HTTP URL 上的请求。

要使单个计算机能够接收远程 PowerShell 命令并接受连接,请使用 Enable-PSRemoting cmdlet。

要为企业中的多台计算机启用远程处理,您可以使用以下扩展选项。

  • 启用允许自动配置侦听器组策略以配置侦听器以进行远程处理。
  • 配置并启用Windows 防火墙:允许本地端口例外组策略。
  • 将 WinRM 服务的启动类型设置为“自动”并启动该服务。

如何使用组策略启用侦听器

对于错误:

  • 错误:访问被拒绝
  • 错误:与远程主机的连接被拒绝。验证 WS-Management 服务是否正在远程主机上运行,并配置为侦听正确端口和 HTTP URL 上的请求。

启用允许自动配置侦听器策略来为域中的所有计算机配置侦听器。

该策略可在以下组策略路径中找到:

Computer Configuration\Administrative Templates\Windows Components
    \Windows Remote Management (WinRM)\WinRM service

启用策略并指定 IPv4 和 IPv6 过滤器。允许使用通配符 (*)。

如何在公共网络上启用远程处理

当本地网络是公共网络且命令中未使用 SkipNetworkProfileCheck 参数时,Enable-PSRemoting 会返回此错误。

错误:无法检查防火墙的状态

在 Windows 服务器版本上,Enable-PSRemoting 在所有网络配置文件上均成功。它创建允许远程访问私人和域(“家庭”和“工作”)网络的防火墙规则。对于公共网络,它创建允许从同一本地子网进行远程访问的防火墙规则。

在 Windows 客户端版本上,Enable-PSRemoting 在专用网络和域网络上成功。默认情况下,它在公共网络上失败,但如果您使用 SkipNetworkProfileCheck 参数,Enable-PSRemoting 会成功并创建一条允许来自同一本地子网的流量的防火墙规则。

笔记

在 Windows PowerShell 2.0 中,在运行 Windows 服务器版本的计算机上,Enable-PSRemoting 创建防火墙规则,允许在专用网络、域网络和公共网络上进行远程访问。在运行 Windows 客户端版本的计算机上,Enable-PSRemoting 创建仅允许在专用网络和域网络上进行远程访问的防火墙规则。

要取消公共网络上的本地子网限制并允许从任何位置进行远程访问,请运行以下命令:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Set-NetFirewallRule cmdlet 由NetSecurity 模块导出。

笔记

对于不同版本的 Windows,防火墙规则的名称可能不同。使用 Get-NetFirewallRule 查看规则列表。在启用防火墙规则之前,请查看规则中的安全设置以验证配置是否适合您的环境。

如何使用组策略启用防火墙例外

对于错误:

  • 错误:访问被拒绝

  • 错误:与远程主机的连接被拒绝。验证 WS-Management 服务是否正在远程主机上运行,并配置为侦听正确端口和 HTTP URL 上的请求。

使用Windows 防火墙:允许本地端口例外策略为域中的所有计算机启用防火墙例外。

该策略位于以下组策略路径中:

Computer Configuration\Administrative Templates\Network
    \Network Connections\Windows Firewall\Domain Profile

此策略允许管理员组的成员为 Windows 远程管理 (WinRM) 服务创建防火墙例外。

如果策略配置不正确,您可能会收到以下错误:

客户端无法连接到请求中指定的目标。验证目标上的服务正在运行并且正在接受请求。

策略中的配置错误会导致 ListeningOn 属性为空值。使用以下命令检查该值。

Get-WSManInstance winrm/config/listener -Enumerate
cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
Source                : GPO
lang                  : en-US
Address               : *
Transport             : HTTP
Port                  : 5985
Hostname              :
Enabled               : true
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {}

如何设置WinRM服务的启动类型

对于错误:

错误:访问被拒绝

PowerShell 远程处理依赖于 Windows 远程管理 (WinRM) 服务。该服务必须正在运行才能支持远程命令。

在 Windows 服务器版本上,WinRM 服务启动类型为自动。但是,在 Windows 客户端版本上,WinRM 服务默认处于禁用状态。

使用以下示例将 WinRM 服务的启动类型设置为“自动”并启动该服务。 ComputerName 参数接受多个值。

$invokeCimMethodSplat = @{
    ComputerName = 'Server01', 'Server02'
    Query = 'Select * From Win32_Service Where Name = "WinRM"'
    MethodName = 'ChangeStartMode'
    Arguments = @{StartMode  = 'Automatic'}
}
Invoke-CimMethod @invokeCimMethodSplat

如何重新创建默认会话配置

对于错误:

错误:访问被拒绝

当您使用 Enable-PSRemoting 时,它会在本地计算机上创建默认会话配置。只要远程命令不包含 ConfigurationName 参数,远程用户就会使用这些会话配置。

如果计算机上的默认配置已取消注册或删除,请使用 Enable-PSRemoting cmdlet 重新创建它们。您可以重复使用此 cmdlet。如果已配置功能,则不会生成错误。

如果更改默认会话配置并想要恢复原始会话配置,您可以删除并重新创建配置。

使用 Unregister-PSSessionConfiguration cmdlet 删除更改的会话配置。使用Enable-PSRemoting恢复原始会话配置。 Enable-PSRemoting 不会更改现有会话配置。

笔记

Enable-PSRemoting 恢复默认会话配置时,它不会为配置创建显式安全描述符。相反,配置继承了 RootSDDL 的安全描述符,默认情况下它是安全的。

要查看 RootSDDL 安全描述符,请键入:

Get-Item wsman:\localhost\Service\RootSDDL

要更改 RootSDDL,请使用 WSMan: 驱动器中的 Set-Item cmdlet。要更改会话配置的安全描述符,请使用带有 SecurityDescriptorSDDLShowSecurityDescriptorUI 参数的 Set-PSSessionConfiguration cmdlet。

有关 WSMan: 驱动器的更多信息,请参阅 about_WSMan_Provider。

如何提供管理员凭据

对于错误:

错误:访问被拒绝

您必须是连接到默认远程会话端点的管理员组的成员。您可以使用 New-PSSessionEnter-PSSessionInvoke-Command cmdlet 的 Credential 参数进行连接使用备用凭据到远程端点。

以下示例显示如何为管理员用户提供凭据。

Invoke-Command -ComputerName Server01 -Credential Domain01\Admin01

有关 Credential 参数的详细信息,请参阅 New-PSSession、Enter-PSSession 或 Invoke-Command 的帮助。

如何为非管理用户启用远程处理

对于错误:

错误:访问被拒绝

默认情况下,只有计算机上管理员组的成员才有权使用默认会话配置。因此,只有管理员组的成员才能远程连接到计算机。

要允许其他用户连接到本地计算机,请授予用户对本地计算机上的默认会话配置的执行权限。

以下示例打开一个属性表,可让您更改本地计算机上默认 Microsoft.PowerShell 会话配置的安全描述符。

Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI

有关更多信息,请参阅 about_Session_Configurations。

如何为其他域中的管理员启用远程处理

对于错误:

错误:访问被拒绝

当另一个域中的用户是本地计算机上管理员组的成员时,该用户无法使用管理员权限远程连接到本地计算机。默认情况下,来自其他域的远程连接仅使用标准用户权限令牌运行。

您可以使用 LocalAccountTokenFilterPolicy 注册表项更改默认行为,并允许属于管理员组成员的远程用户以管理员权限运行。

警告

LocalAccountTokenFilterPolicy 条目对所有受影响计算机的所有用户禁用用户帐户控制 (UAC) 远程限制。在更改策略之前,请仔细考虑此设置的含义。

使用以下命令将 LocalAccountTokenFilterPolicy 注册表值设置为 1。

$newItemPropertySplat = @{
  Name = 'LocalAccountTokenFilterPolicy'
  Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
  PropertyType = 'DWord'
  Value = 1
}
New-ItemProperty @newItemPropertySplat

如何在远程命令中使用 IP 地址

对于错误:

错误:WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同,或者客户端计算机未加入域,则必须使用 HTTPS 传输,或者必须将目标计算机添加到 TrustedHosts 配置设置中。

New-PSSessionEnter-PSSessionInvoke-Command cmdlet 的 ComputerName 参数接受 IP 地址作为一个有效值。但是,由于 Kerberos 身份验证不支持 IP 地址。当您指定 IP 地址时,将使用 NTLM 身份验证。

要支持 NTLM 身份验证,您必须满足以下要求:

  • 配置计算机进行 HTTPS 传输,或将远程计算机的 IP 地址添加到本地计算机上的 TrustedHosts 列表中。
  • 在所有远程命令中使用Credential参数。即使您以当前用户身份连接,这也是必需的。

如何从基于工作组的计算机进行远程连接

对于错误

错误:WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同,或者客户端计算机未加入域,则必须使用 HTTPS 传输,或者必须将目标计算机添加到 TrustedHosts 配置设置中。

当本地计算机不在域中时,您必须满足以下要求:

  • 配置计算机进行 HTTPS 传输,或将远程计算机的 IP 地址添加到本地计算机上的 TrustedHosts 列表中。
  • 验证是否在基于工作组的计算机上设置了密码。如果未设置密码或密码值为空,则无法运行远程命令。
  • 在所有远程命令中使用Credential参数。即使您以当前用户身份连接,这也是必需的。

如何将计算机添加到受信任的主机列表

TrustedHosts 项可以包含以逗号分隔的计算机名称、IP 地址和完全限定域名列表。允许使用通配符。

要查看或更改受信任主机列表,请使用 WSMan: 驱动器。 TrustedHost 项位于 WSMan:\localhost\Client 节点中。只有计算机上管理员组的成员才有权更改计算机上的受信任主机列表。

警告

您为 TrustedHosts 项设置的值会影响计算机的所有用户。

要查看可信主机列表,请使用以下命令:

Get-Item wsman:\localhost\Client\TrustedHosts

以下示例使用通配符 (*) 将所有计算机添加到受信任主机列表中。

Set-Item wsman:localhost\client\trustedhosts -Value *

您还可以使用通配符 (*) 将特定域中的所有计算机添加到受信任主机列表中。例如,以下命令添加 Fabrikam 域中的所有计算机。

Set-Item wsman:localhost\client\trustedhosts *.fabrikam.com

以下示例将受信任主机的列表设置为单个计算机。

$server = 'Server01.Domain01.Fabrikam.com'
Set-Item wsman:\localhost\Client\TrustedHosts -Value $server

要将计算机名称添加到现有受信任主机列表中,请首先将当前值保存在变量中。然后将该值设置为包含逗号分隔列表的字符串,其中包括当前值和新值。

以下示例将 Server01 添加到现有的受信任主机列表中。

$newServer = 'Server01.Domain01.Fabrikam.com'
$curValue = (Get-Item wsman:\localhost\Client\TrustedHosts).Value
Set-Item wsman:\localhost\Client\TrustedHosts -Value "$curValue, $newServer"

要将特定计算机的 IP 地址添加到受信任主机列表中,请使用以下命令格式:

Set-Item wsman:\localhost\Client\TrustedHosts -Value <IP Address>

例如:

Set-Item wsman:\localhost\Client\TrustedHosts -Value 172.16.0.0

要将计算机添加到远程计算机的 TrustedHosts 列表中,请使用 Connect-WSMan 连接到 WSMan: 驱动远程计算机以使用Set-Item 添加计算机。

有关详细信息,请参阅 Connect-WSMan 的帮助。

如何在备用端口上配置远程处理

对于错误:

错误:与指定远程主机的连接被拒绝。验证 WS-Management 服务是否正在远程主机上运行,并配置为侦听正确端口和 HTTP URL 上的请求。

默认情况下,PowerShell 远程处理使用端口 80 进行 HTTP 传输。只要用户未在远程命令中指定 ConnectionURIPort 参数,就会使用默认端口。

使用 Set-Item cmdlet 更改侦听器叶节点中的Port 值。

例如,以下命令将默认端口更改为 8080。

Set-Item wsman:\localhost\listener\listener*\port -Value 8080

如何使用代理服务器配置远程处理

对于错误:

错误:客户端无法连接到请求中指定的目标。验证目标上的服务正在运行并且正在接受请求。

由于 PowerShell 远程处理使用 HTTP 协议,因此它受 HTTP 代理设置的影响。在拥有代理服务器的企业中,用户无法直接访问PowerShell远程计算机。

要解决此问题,请在远程命令中使用代理设置选项。

  • 使用 New-PSSessionOption cmdlet 的 ProxyAccessTypeProxyAuthenticationProxyCredential 参数创建一个包含 PSSessionOption对象。
  • 将包含 PSSessionOption 对象的变量与 New-PSSessionEnter-PSSessionSessionOption 参数结合使用,或者Invoke-Command 命令。
$newPSSessionOptionSplat = @{
    ProxyAccessType = 'IEConfig'
    ProxyAuthentication = 'Negotiate'
    ProxyCredential = 'Domain01\User01'
}
$SessionOption = New-PSSessionOption @newPSSessionOptionSplat

$newPSSessionSplat = @{
    ConnectionUri = 'https://www.fabrikam.com'
    SessionOption = $SessionOption
}
New-PSSession @newPSSessionSplat

有关 New-PSSessionOption cmdlet 的详细信息,请参阅 New-PSSessionOption。

要为当前会话中的所有远程命令设置这些选项,请将 $PSSessionOption 首选项变量设置为您创建的 PSSessionOption 对象。有关详细信息,请参阅 about_Preference_Variables。

要为本地计算机上所有 PowerShell 会话中的所有远程命令设置这些选项,请将 $PSSessionOption 首选项变量添加到您的 PowerShell 配置文件中。有关 PowerShell 配置文件的更多信息,请参阅 about_Profiles。

如何在 64 位计算机上检测 32 位会话

对于错误:

错误:术语 未被识别为 cmdlet、函数、脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

如果远程计算机运行 64 位版本的 Windows,并且远程命令使用 32 位会话配置(例如 Microsoft.PowerShell32),WinRM 将加载 WOW64 进程。 Windows 自动将对 $env:Windir\System32 的所有引用重定向到 $env:Windir\SysWOW64 目录。

因此,无法找到 System32 目录中正在运行的工具,而这些工具在 SysWow64 目录中没有对应的工具。

要查找会话中使用的处理器体系结构,请使用 PROCESSOR_ARCHITECTURE 环境变量的值。

$s = New-PSSession -ComputerName Server01 -ConfigurationName CustomShell
Invoke-Command -Session $s {$env:PROCESSOR_ARCHITECTURE}
x86

有关更多信息,请参阅 about_Session_Configurations。

解决策略和偏好问题

本节讨论与本地和远程计算机上设置的策略和首选项相关的远程处理问题。

如何更改 Import-PSSession 和 Import-Module 的执行策略

对于错误:

错误:导入模块:无法加载文件 ,因为此系统上禁用了脚本的执行。

Import-PSSessionExport-PSSession cmdlet 创建包含未签名脚本文件和格式化文件的模块。

要导入由这些 cmdlet 创建的模块,当前会话中的执行策略不能是 RestrictedAllSigned。有关更多信息,请参阅 about_Execution_Policies。

要导入模块而不更改本地计算机的执行策略,请使用 Set-ExecutionPolicyScope 参数为单个进程设置限制较少的执行策略。

例如,以下示例将当前进程的执行策略设置为 RemoteSigned。更改仅影响当前进程。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

您还可以使用 PowerShell.exeExecutionPolicy 参数以限制较少的执行策略启动单个会话。

pwsh.exe -ExecutionPolicy RemoteSigned

如何设置和更改配额

您可以使用配额来保护本地计算机和远程计算机免遭意外和恶意的过度资源使用。当配额与命令冲突时,PowerShell 会生成以下错误。

错误:从远程客户端接收的总数据超出允许的最大值。

WSMan 提供程序具有以下配额设置:

  • WSMan:

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯