PowerShell 技能连载 - 配置网络适配器
以下是一个简单的例子,演示如何向网络适配器分配 IP 地址、网关,和 DNS 服务器。这段脚本列出所有活动的网络适配器。当您选择一项并点击确认,脚本将把硬编码的地址赋给网络适配器。
请注意一下脚本只是模拟改变网络配置。如果您希望真的改变网络设置,请移除 -WhatIf
参数:
1 | $NewIP = '192.168.2.12' |
以下是一个简单的例子,演示如何向网络适配器分配 IP 地址、网关,和 DNS 服务器。这段脚本列出所有活动的网络适配器。当您选择一项并点击确认,脚本将把硬编码的地址赋给网络适配器。
请注意一下脚本只是模拟改变网络配置。如果您希望真的改变网络设置,请移除 -WhatIf
参数:
1 | $NewIP = '192.168.2.12' |
即便是有经验的 PowerShell 用户也会经常忽略 PowerShell 强大的帮助系统,它类似 Linux 中的 man page。您所需要做的只是一次性下载帮助文件。要下载帮助文件,您需要在提升权限的 PowerShell 中运行以下代码:
1 | PS> Update-Help -UICulture en-us -Force |
当帮助文件下载完以后,以下是一个很棒的基础列表,展示 PowerShell 语言的几乎所有细节:
1 | PS> Get-Help about* | Select Name, Synopsis |
您甚至可疑用这行代码创建您自己的 PowerShell 帮助查看器:
1 | Get-Help about* | |
当运行这行代码时,PowerShell 将搜索帮助主题并打开一个网格视图。只需要按住 CTRL
并选择所有您想阅读的主题,然后单击确认。选中的主题将会在独立的帮助查看窗口中打开。
Windows 10 缺省安装了一系列 APP,而且即使您手动卸载了它们,它们有可能在下一个重大 Windows 10 更新的时候又回来。
PowerShell 也可以移除这些 Windows 10 APP。您可以在任意时候重新运行脚本,来确保要清除的 APP 确实被删除了。例如这行代码将移除 3D Builder APP:
1 | PS> Get-AppxPackage *3dbuilder* | Remove-AppxPackage |
有许多类似 http://www.thewindowsclub.com/remove-built-windows-10-apps-users-using-powershell-script 的网站,提供许多更多如何移除特定的 Windows 10 APP 的例子。
在前一个例子中我们演示了 Rename-Item
中 NewName
的神奇功能。它可以接受一个新的文件名,也可以接受一个脚本块。脚本块可以用来批量命名大量文件。
我们现在来看看 PowerShell 函数如何实现这种神奇的参数!以下是一个定义了两个参数的函数:
1 | function Test-MagicFunc |
您可以把它当作一个传统的独立函数运行:
1 | PS> Test-MagicFunc -Par1 100 -Par2 50 |
您也可以通过管道输出来运行它,并且传入一个固定的第二参数:
1 | PS> 1..4 | Test-MagicFunc -Par2 99 |
但是您也可以对的第二个参数传入一个脚本块,该脚本块引用了从管道收到的对象:
1 | PS> 1..4 | Test-MagicFunc -Par2 { $_ * $_ } |
事实证明,这个魔法十分简单:Par2
的参数定义显示它可以接受管道输入。它不关心是由属性名输入 (ValueFromPipelineByPropertyName) 还是通过值输入 (ValueFromPipeline)。在这些例子中,当您将一个脚本块传给参数时,PowerShell 将该脚本块当作管道输入值的接口:$_
引用输入的对象,脚本块可以使用任何需要的代码来计算需要绑定到参数的值。
重命名单个文件可以很容易地用 Rename-Item
实现,但是有些时候 cmdlet 参数可以更聪明地使用,帮您实现批量自动化。
例如,假设您的照片文件夹中有大量的照片:
1 | $path = [Environment]::GetFolderPath('MyPictures') |
如果您想对它们命名,例如在前面加一个序号,您需要设计一个循环,例如这样:
1 | $path = [Environment]::GetFolderPath('MyPictures') |
还有一个简单得多的解决方案:-NewName
参数也可以接受一个脚本块。每当一个元素通过管道传给 Rename-Item
,脚本块就会执行一次。代码可以简化为:
1 | $path = [Environment]::GetFolderPath('MyPictures') |
还有一处重要的区别:Rename-Item
执行的脚本块是在它自己的作用域中运行的,所以如果您希望使用一个递增的计数器,那么需要在变量名之前增加一个 script:
,这样变量就作用在脚本作用域上。
警告:在某些 PowerShell 版本中有一个不友好的 bug,重命名文件将改变 Get-ChildItem
的输出,所以如果您直接将 Get-ChildItem
的结果通过管道传给 Rename-Item
,您可能会遇到无限死循环,文件会一直被重命名直到文件路径长度超过限制。要安全地使用它,请确保在将变量传给 Rename-Item
之前将 Get-ChildItem
的结果保存到变量中!
在前一个技能中我们解释了如何获取 PowerShellGet 并在您的 PowerShell 版本中运行。现在我们来看看 PowerShell 陈列架能够如何方便地扩展 PowerShell 功能。
PowerShell 是一个多用途的自动化语言,而且世界各地的数据库专家已经开始开发一个名为 “dbatools” 的 PowerShell 扩展,它可以从 PowerShell 陈列架免费地下载:
1 | PS> Install-Module dbatools -Scope CurrentUser -Force |
当安装完之后,PowerShell 现在拥有了大量新的数据库相关的命令:
1 | PS> Get-Command -Module dbatools |
这个模块的文档齐备,所以您可以使用 Get-Help
查看每个命令的细节和示例代码。同样地,当您用您喜欢的搜索引擎搜索 “PowerShell + dbatools”,可以找到一个有许多示例和教程的,充满活力的社区。
在前一个技能中我们介绍了免费的 ScriptBlockLoggingAnalyzer
,它覆盖了 PowerShell 日志的代码。默认情况下,它只对一小部分命令有效,但如果您启用了所有脚本块的日志,那么您机器上任何人运行的任何代码都会被记录。
以下是操作步骤(只对 Windows PowerShell 有效,请在提升权限的 PowerShell 中运行!):
1 | #requires -RunAsAdministrator |
现在起,这台机器上运行的所有 PowerShell 代码都会被记录。要查看记录的代码,请使用以下代码:
1 | PS> Get-SBLEvent | Out-GridView |
在前一个技能中我们解释了如何获取 PowerShellGet 并在您的 PowerShell 版本中运行。现在我们来看看 PowerShell 陈列架能够如何方便地扩展 PowerShell 功能。
脚本块日志是 PowerShell 5 以及之后版本的新功能。当 PowerShell 引擎编译(执行)一个命令,它将命令的执行记录到一个内部的日志文件。默认情况下,只记录了少数被认为与安全性相关的命令。通过一个名为 ScriptBlockLoggingAnalyzer
的免费模块,您可以找到 PowerShell 在您机器上记录日志的代码:
1 | # install the extension module from the Gallery (only required once!) |
请注意 ScriptBlockLoggingAnalyzer
当前只适用于 Windows PowerShell。PowerShell Core 使用相同的机制,但是不同的日志。由于 PowerShell Core 中的日志名称还在开发中,所以您需要手工调整模块来适应 PowerShell Core。
在前一个技能中我们解释了如何获取 PowerShellGet 并在您的 PowerShell 版本中运行。现在我们来看看 PowerShell 陈列架能够如何方便地扩展 PowerShell 功能。
下次您发送会议、上课,或是派对邀请时,为啥不加上一个地理定位的二维码呢?大多数现代的智能设备可以通过它们的相机 APP 扫描这些二维码,并且在地图中显示该地址,且提供如何到达该地址的路径。
创建一个地理位置二维码十分简单,因为困难的部分已经由 QRCodeGenerator
模块实现了:
1 | # adjust this to match your own info |
当您在上述例子中传入一个地址,它将自动通过 Google 免费的 API 翻译成经纬度。这可能并不总是起作用,并且需要 Internet 连接。如果您知道您的位置的经纬度,您当然也可以通过 -Latitude
和 Longitude
参数传入经纬度。
在前一个技能中我们解释了如何获取 PowerShellGet 并在您的 PowerShell 版本中使用。现在我们来看看 PowerShell 陈列架能够多门方便地扩展 PowerShell 的功能。
下次您打印名片的时候,何不增加一个二维码呢?它使得增加联系人十分方便!大多数现代的设备都支持二维码,所以当您将相机 APP 对准一个二位码时,智能手机可以直接向这个联系人发送邮件,或者将他添加为您的联系人。
以下是创建 vCard 二维码的方法:
1 | # adjust this to match your own info |