[玩转系统] 用于故障排除的 PowerShell 远程处理
作者:精品下载站 日期:2024-12-14 08:11:28 浏览:15 分类:玩电脑
用于故障排除的 PowerShell 远程处理
本文不会指导您设置 PowerShell (PS) 远程处理,因为这已在本博客的早期 PowerShell 远程处理入门文章中进行了解释。
相反,我将向您展示远程执行故障排除的方法,例如当问题是基于 GUI 的登录(例如通过 mstsc 或物理或虚拟控制台挂起/运行缓慢)时。
确保您对可能需要进行故障排除的计算机进行了 PS 远程设置,并在问题发生之前对其进行测试,因为到那时可能已经太晚了。
自我远程 Cmdlet
许多 cmdlet 都采用 -Computername 参数,因此可以针对一台或多台远程计算机运行(取决于它们是采用字符串还是字符串数组类型作为该参数 - 请参阅下面的屏幕截图)。我们可以使用 PowerShell 来查询有多少 cmdlet 采用 -Computername 参数,而不是进行大量 RTFM 操作:
Get-Command | Where { $_.Parameters -and $_.Parameters.ContainsKey('ComputerName') } | select Name,@{n='Array';e={$_.Parameters['ComputerName'].ParameterType.IsArray}},source
采用 -computername 参数的所有 cmdlet 列表
这些通常不使用 PS 远程处理来运行,但通常需要打开防火墙端口(我不建议在面向内部的服务器上禁用 Windows 防火墙!)。在可以传递数组的情况下,有些数组将在某种程度上并行操作,这意味着结果可以比单独查询每台计算机更快地返回。在 PowerShell v7.1 中,只有 20 个 cmdlet 采用 -Computername 参数,其中大部分与远程处理有关。
事件日志
我经常使用的一个可以自我远程控制的命令是 Get-WinEvent,因为问题的线索/答案通常包含在事件日志中。与过去只有 4 个事件日志不同,现在我们的事件日志通常超过 300 个,手动查看/搜索这些日志既乏味又耗时。在这里,我们可以使用 PowerShell 从有问题的计算机检索事件日志,并手动查看它们或搜索特定术语。
例如,这里有一个单行代码,它将显示今天指定时间范围内发生的所有事件(将 dd/mm/yyyy 或 mm/dd/yyyy 添加到时间字符串以在另一天搜索)在指定计算机上“弗雷德”:
Get-WinEvent -ListLog * -ComputerName fred | Where-Object { $_.RecordCount } | ForEach-Object{ Get-WinEvent -ComputerName fred -EA SilentlyContinue -FilterHashtable @{logname=$_.logname;starttime='07:45:15';endtime='07:47:15'}} | Select-Object * -ExcludeProperty ?Id,Version,Qualifiers,Level,Task,OpCode,Keywords,Bookmark,*Ids,Properties | sort TimeCreated
将结果放入 csv 文件(通过 Export-CSV,别名 epcsv)或屏幕网格视图(通过 Out-Gridview,别名ogv),使得搜索/过滤特定搜索词变得非常容易。
网格视图中的事件日志
远程失败的常见原因 Get-WinEvent 是远程防火墙未启用“远程事件日志管理”规则或未启用“远程事件日志管理”规则。用于查询事件日志的帐户没有权限。
阅读我们的由两部分组成的博客系列,了解有关使用 PowerShell 和 .NET 或 WMI 处理和监视事件的更多信息。
阅读该系列的第 1 部分 >
远程处理单个 Cmdlet
如果 cmdlet/函数没有内在远程处理,则可以使用 PowerShell 通过 Invoke-Command cmdlet 对其进行远程处理,假设 PS 远程处理具有已成功配置并且具有足够权限的帐户可用(默认情况下只有管理员可以使用 PS 远程处理,但也允许内置本地组“远程管理用户”的成员)。
以具有 PS 远程处理权限的用户身份运行 Invoke-Command ,或者传递一个凭证对象,可通过 轻松交互式构建Get-Credential),通过 -credential 参数。 PowerShell 的基本原则之一是在管道上拥有对象,以便随后可以通过进一步的 cmdlet/函数/脚本和 Invoke-Command 处理它们> 尊重这一点,以便可以在运行脚本/cmdlet 的本地计算机上处理从远程计算机返回的对象。
下面是一个示例,我们从远程计算机获取进程,并查看哪些进程使用了最多的 CPU,这可以很好地指示导致性能问题的原因 - 特别是当您登录到出现问题的计算机时却发现当你检查时,CPU消耗很低。
机器列表,按 CPU 使用率排序
请注意,我们已从远程计算机检索所有进程,但已排序并选择了运行 Invoke-Command 的计算机上的前 10 个使用者。根据操作的不同,最好在远程端进行过滤,以减少需要传输和处理的数据量 - 最佳 PowerShell 性能的黄金法则之一是“尽可能过滤到左侧” 。
另请注意,-HideComputerName 参数用于整理结果,尽管当 Invoke-Command 传递计算机名称数组以便其运行时通常不建议这样做同时多台机器,否则知道什么结果来自哪台计算机可能会很棘手(如果相关)。
远程会话
将 Invoke-Command 与 -Computername 参数一起使用,可为每次调用建立和拆除一个新的远程会话,以便您将对同一台计算机进行大量远程处理(s) 与建立单个会话并将其用于每个远程命令并最终在一切完成后将其拆除一次相比,它变得效率低下并且需要更多的时间和资源。
PowerShell 以远程会话的形式提供此功能,它支持上述用法,非交互式,或者它可以交互式使用,就像在 Unix 的旧(不安全)时代,您可以 telnet 到计算机以使用命令行对其进行故障排除仅(非 GUI)工具,最近更安全地使用 PuTTY 等工具通过 SSH 连接执行类似操作。
为了以非交互方式使用,我们使用 New-PSSession 建立一次远程连接,并将其分配给一个变量,然后将其传递给后续的 Invoke-Command 调用然后最后传递给Remove-Session来将其拆除。
通过 New-PSSession 以非交互方式使用 PowerShell 远程会话
要以交互方式建立和使用远程会话,我们使用 Enter-PSSession,如下所示:
通过 Enter-PSSession 交互使用 PowerShell 远程会话
请注意提示符如何更改为将计算机名称放在方括号中,以帮助您记住您现在位于不同的计算机上,并可能避免在错误的计算机上执行错误的操作(也许!)。
命令行历史记录存储在本地计算机上,因此即使远程计算机没有持久的用户配置文件并且您重新启动它,以前使用的命令也将在您下次远程访问它时可用(并且可以通过 ctrl r/s 进行搜索,而不必光标通过它们),并且您还记录了所做的事情(假设您在本地有持久的用户配置文件)。
如果您运行具有用户界面的命令,例如记事本,它只会挂起,不显示窗口。但是,我们可以通过使用 Start-Process 在后台有效运行进程来启动远程 SysInternals Process Monitor(无头)等操作。这样,我们可以在遇到故障时停止跟踪,例如缓慢的 Windows 10 登录已完成,或者我们可以将 /runtime 参数传递给 procmon 并指定运行它的时间(以秒为单位)。在已建立的远程会话中运行 procmon headless 的典型命令行是:
Start-Process -FilePath c:\temp\Procmon.exe -ArgumentList ‘/accepteula /backingfile c:\temp\logon.pml /nofilter /quiet’
当我们捕获了我们需要的内容后,我们再次调用 procmon,仅使用 /terminate 参数来停止跟踪以及通过 /backingfile 参数生成的 .pml 文件可以在有 GUI 会话的地方进行检查。请注意,默认情况下,从远程会话中访问网络共享不起作用,尽管可以启用此功能。
结论
希望这能让您了解使用 PowerShell 在远程系统上可以实现什么,以及使用它比建立完整远程会话更快/更容易的一些场景。
如果您想了解有关使用 PowerShell 进行故障排除的更多信息,请务必查看我的另一篇文章:用于解决 Windows 问题的十大 PowerShell 命令。
相关内容
- PowerShell 远程处理入门 |脚本运行器
- 使用 PowerShell 和 .NET 处理事件(第 1 部分)|脚本运行器
- 使用 PowerShell 和 WMI 处理事件(第 2 部分)|脚本运行器
- 我用于解决 Windows 问题的 10 个最佳 PowerShell 命令 |脚本运行器
- 进程监视器 - Windows Sysinternals |微软文档
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag