这五个 Windows PowerShell 命令非常好,用起来感觉像作弊
如果你经常使用 PowerShell 工作,你可能曾经重打忘记的命令、手动检查日志文件,或者一个个地登录服务器。从长远来看,这会变得很烦人,而且知道你必须重复这些操作也很令人沮丧。一些 cmdlet 可以为你解决这些问题,并最终对日常用户非常有用。
将结果发送到可搜索窗口
它确实意味着快速访问
当你在控制台中看到大量滚动的文本时,你将无法轻松找到特定信息。Out-GridView cmdlet 可以在这里提供帮助。如果你将结果传送到这个 cmdlet,它会将文本输出转换为一个独立窗口,在那里你的数据以表格形式显示。你不需要每次想要查找某些内容时都调整复杂的过滤代码,这个命令让你可以通过点击来控制。
窗口顶部有一个搜索过滤框,允许你通过输入关键字浏览数千行数据,例如密集的事件日志或后台进程。你可以通过点击列标题或使用下拉菜单添加条件过滤来对信息进行排序,从而在不增加任何代码的情况下缩小结果范围。
确保添加 -PassThru,因为它使网格窗口成为一个交互式选择工具。它会暂停你的脚本,让你高亮特定的行。一旦你点击确定,窗口会关闭,这些项目会被送回管道,让你的脚本可以继续处理它们。这是学习如何自动化 Windows 的一个巨大步骤。
在多台计算机上同时运行代码
用更少的时间做更多的工作
如果你管理大量服务器,你就会知道逐台登录机器进行检查或更新的感受。Invoke-Command 可以节省时间,因为它可以在数百台远程机器上同时运行代码,而不必一台一台地访问服务器。你可能不需要在数百台机器上使用它,但如果你有四五台,这可以为你节省大量时间。
该命令使用远程协议,例如 Windows 上的 WinRM 或跨平台设置的 SSH,以支持一对多的远程操作。它将指令发送到列表中的每台计算机,并在控制台上收集结果。当你将一个脚本块传递给 cmdlet 时,它会同时将你的代码发送到所有目标系统。随着远程运行的完成,结果会以对象的形式返回到你的本地会话中,因此你无需监控每台机器。
为了帮助你跟踪传入的数据,PowerShell 会在每个对象中添加一个 PSComputerName 属性,以显示它来自哪个服务器。这为你提供了一种在本地对数据进行分组和排序的方法,以便发现你的设置中的差异。
使用快捷方式查找过去的工作
不要重复输入相同的命令
如果你花时间编写了一个复杂的 PowerShell 命令,你可能会在几天后意识到需要相同的逻辑,但却记不清语法。PowerShell 有一个命令历史系统,就像你过去工作的记录,可以让你检索之前执行过的命令。
当你输入命令时,PowerShell 会保存它。现代环境使用内置的会话历史记录和由 PSReadLine 模块管理的持久历史记录。虽然内置历史记录只跟踪当前会话中的命令,并且在关闭窗口时 PowerShell 会删除它们,PSReadLine 会保持连续记录。
此模块会将你在所有会话中输入的每条命令写入计算机上的一个文件,因此你在重启后不会丢失工作。你无需重新输入长脚本,可以使用键盘快捷键调出之前使用过的命令。当你输入井号字符 #,后跟命令中的关键字并按下 Tab 键时,PowerShell 会在历史记录中搜索最近的匹配项。只需不断按 Tab 键,直到找到所需的命令。我通常从 #get 开始,然后按 Tab 键,它通常能更快找到我需要的内容。
实时观看文件更新
看到变化实时到来
反复运行相同的命令仅仅为了查看日志文件是否已更新是很烦人的。如果你想在系统写入文件时实时查看文件流,使用带有 -Wait 参数的 Get-Content 命令是一个很好的方法。通常,Get-Content 会读取文件并显示其内容。然而,当你添加 -Wait 参数时,该命令行为会有所不同。
PowerShell 并没有关闭文件,而是保持连接打开,并每秒检查一次新内容。当系统添加新行时,你会在屏幕上看到它们。由于你不必重新启动命令,这是监视错误或跟踪后台进程表现的好方法。
你可以通过将 -Wait 与像 -Tail 这样的代码结合来调整这一点。例如,如果你正在查看一个非常大的日志文件,可以使用 -Tail 只显示最后几行,然后再开始等待。这可以防止你的控制台显示过多的旧数据。如果你使用 -TotalCount 请求的行数多于文件包含的行数,Get-Content 会显示当前内容,并等待系统将其他行写入磁盘。这有助于需要暂停直到特定日志事件发生的脚本。
缩小列表范围以查找特定项目
在大海捞针
在大型数据集中找到所需的具体信息很困难,但过滤是一个很好的解决方案。当你处理过多的结果时,Where-Object 命令可以缩短列表,只显示重要的项目。它将其他命令的输出作为输入,并根据你设置的规则限制这些数据。你可以查找过大的文件,或者过滤系统服务以找到尚未启动的服务。
Where-Object cmdlet 就像管道中的守门员,检查每个对象,并只让符合你条件的对象通过到下一个命令。PowerShell 允许你使用一种更简单的语法来设置这些规则,这种语法读起来像自然语言。这使得快速匹配变得容易,例如检查服务状态是否等于特定状态。
对于更复杂的情况,您可以使用带大括号和变量的脚本块语法来一次检查多个条件。这使您可以结合使用像 -and -or 这样的运算符来创建特定的筛选条件。
将这些命令留作将来使用
这些 cmdlet 都不需要额外的设置或第三方工具。它们已经在 PowerShell 中,你唯一需要做的就是知道它们的存在。一旦你开始将它们融入你的日常操作,你会很快发现你之前花在冗长方式上的时间有多少。只要确保你把它们记下来或收藏这个页面,以便在需要时可以回去查看。








