PowerShell 技能连载 - 注册缺省的 PowerShell 源
如果您使用 PowerShellGet 模块(默认随着 Windows 10 和 Server 2016 分发),您可以方便地下载和安装共享的 PowerShell 脚本和模块:
1 | PS> Find-Module -Tag Security |
不过有些时候,机器上缺失了缺省的 PSGallery 源,要还原缺省设置,请使用以下代码:
1 | PS> Register-PSRepository -Default |
如果您使用 PowerShellGet 模块(默认随着 Windows 10 和 Server 2016 分发),您可以方便地下载和安装共享的 PowerShell 脚本和模块:
1 | PS> Find-Module -Tag Security |
不过有些时候,机器上缺失了缺省的 PSGallery 源,要还原缺省设置,请使用以下代码:
1 | PS> Register-PSRepository -Default |
大多数已安装的文件将自己注册在 Windows 注册表中的四个位置。以下是一个名为 Get-InstalledSoftware
的快速 PowerShell 函数,它能够查询所有这些键名,然后输出找到的软件的信息。
1 | function Get-InstalledSoftware |
这个函数也演示了如何不使用 PowerShell 驱动器而直接使用原生的注册表路径。方法是在路径前面添加 provider 的名称。在这个例子中是 Registry::
。
这个函数将所有输出的列(属性)也暴露为参数,所以可以方便地过滤查询结果。以下例子演示了如何查找所有名字包含“Microsoft”的软件:
1 | PS C:\> Get-InstalledSoftware -DisplayName *Microsoft* |
您是否也为任务栏中的 OneDrive 图标感到烦恼?如果您从未使用 OneDrive,以下是两个易于使用的 PowerShell 函数,能够帮助您在资源管理器中隐藏(和显示)OneDrive 图标:
1 | function Disable-OneDrive |
执行后不需要重启,结果立即生效。
Get-Service
cmdlet 有一系列缺点。例如,没有一个过滤运行中或停止的服务的参数,并且结果不包含服务的启动模式。
WMI 可以传出这些信息。以下是一个获取最常用服务信息的简单函数:
1 | function Get-ServiceWithWMI |
以下是调用该命令的方法,这行代码显示所有禁用的服务,包括它们的友好名称和描述:
1 | PS C:\> Get-ServiceWithWMI -StartMode Disabled | Out-GridView |
Robocopy.exe
是一个非常有用并且功能多样的内置命令,它可以高效地将文件从一个地方复制到另一个地方。不幸的是,该命令有很多选项和开关,使得它很难掌握。
如果您只是希望将文件从 A 处拷贝到 B 处,以下是将 robocopy 封装并将这个怪兽转化为易用的复制命令的函数:
1 | function Copy-FileWithRobocopy |
以下是如何使用新命令的方法:下面这行代码将所有 .log 文件从 Windows 文件夹复制到 c:\logs
文件夹:
1 | PS> Copy-FileWithRobocopy -Source $env:windir -Destination c:\logs -Filter *.log |
从 PowerShell 3 开始,PSCustomObject
可以将从其他地方收集的有用信息方便地合并进来。以下例子从不同的 WMI 类获取各种信息,并且输出为一个清单。该清单可以传递给其它命令,也可以直接使用:
1 | # get information from this computer |
当从 CSV 加载数据到 Excel 中时,我们无法指定格式。
1 | PS> Get-Quote |
1 | PS> Get-Quote -Topics men |
1 | PS> Get-Quote -Topics jewelry |
以下脚本首先加载 HTML 内容,然后使用正则表达式来搜集 HTML 中的引用。当然这只适用于原文有规律的情况。wikiquotes 的引用模式是这样的:
1 | <li><ul>Quote<ul><li>Author</li></ul></li> |
所以以下代码将搜索这个模式,然后清理结构中找到的文本:需要移除 HTML 标签,例如链接,多个空格需要合并为一个空格(通过嵌套函数 Remove-Tag
)。
以下是代码:
1 | function Get-Quote ($Topics='Computer', $Count=1) |
Ole Morten Didriksen 发现了一些 API 调用可以启用音量控制 (https://gist.github.com/oledid)。通过这种方法,用 PowerShell 控制音量静音、取消静音、设置音量就很容易了:
1 | #requires -Version 2.0 |
当您在 PowerShell 中输入 h
命令,您可以看到在这个会话中输入的命令历史。受到 Pratek Singh 的启发 Powershell Get-History+ – Geekeefy,以下是一个灵活的 h+
命令,它能够在网格界面窗口中显示历史纪录,并且支持选定历史记录。按住 CTRL
键可以选择多个项目。
Pratek 通过 Invoke-Expression
命令执行所有选中的项目。这可能有风险,并且它并不显示命令,所以您不知道执行了什么命令。所以在 h+
中,我们把选中的项目复制到剪贴板中。这样,您可以将内容粘贴到需要的地方:可以粘贴到文件中,或是将它们粘贴回 PowerShell 来执行。将它们粘贴回 PowerShell 中之后,您还有机会查看这些命令,然后按 ENTER
键执行这些命令。
1 | Function h+ |
只需要将 h+ 函数加入您的配置文件脚本中(可以通过 $profile
找到路径)这样它随时可以拿来使用。
Prateek Singh 贡献了一个干净的,CSV 格式的的 MAC 厂商列表。这个列表可以在他的博客 Get-MACVendor using Powershell – Geekeefy 找到。在通过 MAC 地址确定网络设备的厂商时,这个列表十分有用。
您可以用 PowerShell 方便地将它下载到计算机中:
1 | #requires -Version 3.0 |