PowerShell 技能连载 - 禁止 Windows 10 中的 OneDrive
您是否也为任务栏中的 OneDrive 图标感到烦恼?如果您从未使用 OneDrive,以下是两个易于使用的 PowerShell 函数,能够帮助您在资源管理器中隐藏(和显示)OneDrive 图标:
1 | function Disable-OneDrive |
执行后不需要重启,结果立即生效。
您是否也为任务栏中的 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 |
有些时候您可能需要创建非表格形式的,个性化的报表。
对于这种情况, PowerShell 可以连接到 Excel 的对象模型。通过这种方法,您可以操作独立的单元格,读写它们的内容,甚至对它们进行格式化。这给你最大的灵活度。然而,它的缺点是需要大量的编码,因为您需要人工操作每一个单元格。并且,通过 .NET 操作 COM 对象相对比较慢。
以下是起步的代码。它展示了如何连接到 Excel,存取独立的单元格,并应用格式设置:
1 | #requires -Version 2.0 |
当从 CSV 中导入数据到 Excel 时,您无法指定格式,包括字体和颜色等。从 HTML 数据中导入 Excel 则可以包含格式。以下是一个演示创建一个带格式的彩色 Excel 报告是多么容易的例子,假设报表中包含一张表格:
1 | #requires -Version 2.0 |