如果您的机器通过不同网络连接,连到了 internet(或 VPN),以下两个函数可能对您有用。
Get-ActiveConnection 列出当前所有获取到 IP 地址的网络连接。Test-ActiveConnection 接受一个关键字并检查是否有一个名字中包含该关键字的活动连接。
1 | function Get-ActiveConnection |
以下是一个快速的演示输出:
1 | PS> Get-ActiveConnection |
如果您的机器通过不同网络连接,连到了 internet(或 VPN),以下两个函数可能对您有用。
Get-ActiveConnection 列出当前所有获取到 IP 地址的网络连接。Test-ActiveConnection 接受一个关键字并检查是否有一个名字中包含该关键字的活动连接。
1 | function Get-ActiveConnection |
以下是一个快速的演示输出:
1 | PS> Get-ActiveConnection |
PowerShell 技能连载 - 从 Windows 10 中移除臃肿的软件
Windows 10 附带了各种预装的应用程序和其它特性,这些内容可能是某些人反感。Richard Newton 创建了一个 PowerShell 脚本,用来识别和移除许多预装的特性,并且加强了隐私设置。他在 https://github.com/Sycnex/Windows10Debloater 描述了他的项目。
源码可以在这里找到:https://github.com/Sycnex/Windows10Debloater/blob/master/Windows10Debloater.ps1。
我们向您推荐这个脚本因为它包含了许多有用的技术,演示了在 Windows 10 中如何移除应用和注册表键。当然,不建议在不了解的情况下运行这个脚本。请确保您了解将会移除什么内容,以及您是否真的希望移除它。
PowerShell 技能连载 - 通过 PowerShell 管理 FTP
在 PowerShell 中没有内置 FTP 命令,但是您可以方便地下载和安装一个免费的扩展,该扩展提供了您想要的 FTP 管理功能。只需要运行这行代码:
1 | PS> Install-Module -Name Posh-SSH -Scope CurrentUser |
如果 PowerShell 无法找到 Install-Module 命令,那么您很有可能没有运行最新版本的 PowerShell (5.1)。请升级您的 PowerShell,或者添加 Microsoft 的 “PowerShellGet” 模块,该模块提供了 Install-Module 命令。
该命令会会从公共的 PowerShell Gallery 下载 Posh-SSH 模块。当您同意下载内容之后,便新增了以下指令:
1 | PS> Get-Command -Module Posh-SSH |
在 powershellmagazine.com 有一篇延伸的文章介绍如何使用这些命令:
PowerShell 技能连载 - 格式化数字(第 2 部分)
在前一个技能中我们介绍了 Get-DisplayFileSize 函数,它可以自动将字节数转换成容易阅读的带单位的数字,例如 “KB” 和 “MB”。
使用 Select-Object 指令,您可以创建一个带有易读的文件尺寸的文件夹列表:
1 | $Length = @{ |
请注意计算属性 Length 仍然可以用于排序。它仍是字节数据,只是显示的方式改变了。
PowerShell 技能连载 - 格式化数字(第 1 部分)
以下 Get-DisplayFileSize 函数接受任何字节数值,并且返回一个以 “MB”、”GB” 或 “PB” 为单位的,格式良好的大小值。
1 | function Get-DisplayFileSize |
以下是一些例子:
1 | PS> Get-DisplayFileSize -Number 800 |
真正有趣的地方是这个函数返回的并不是字符串。它返回的是原始的数值,而只是覆盖了 ToString() 方法。您仍然可以对它进行排序、计算和对比:
1 | PS> $n = 1245646233213 |
您可能还没有注意到,Get-ChildItem(也叫做 dir 或者 ls) 的 -Filter 参数并不是像您所想的方式工作。以下代码的本意是只查找 PowerShell 脚本,但实际上找到的结果更多:
1 | Get-ChildItem -Path $env:windir -Filter *.ps1 -Recurse -ErrorAction Silent | |
以下是查找结果:
1 | Count Name |
-Filter 参数的作用和传统的 dir 命令的行为类似。要真正起到您想要的效果,您应该使用以下代码:
1 | Get-ChildItem -Path $env:windir -Filter *.ps1 -Include *.ps1 -Recurse -ErrorAction SilentlyContinue | |
以下是正确的结果:
1 | Count Name |
虽然您可以省略 -Filter 参数,但强烈建议保留着它。首先,-Include 只能和 -Recurse 配合使用其次,-Include 速度很慢。先用一个粗略(但是快速)的 -Filter 过滤,然后用 Include 是最佳实践。
PowerShell 技能连载 - 用网格视图窗口显示列表视图(第 3 部分)
在前一个技能中我们介绍了 ConvertObject-ToHashTable 函数,它能方便地将对象显示在一个网格视图窗口中。
以下代码是一个改进的版本,能够根据字母顺序排列属性,并且可以由您决定每一列的名称。缺省情况下,Out-GridView 的列名为 “Property” 和 “Value”,但您将它们改为任意名称:
1 | function ConvertObject-ToHashTable |
PowerShell 技能连载 - 用网格视图窗口显示列表视图(第 2 部分)
Out-GridView 是一个有用的 cmdlet。但如果只是用它来显示一个单一对象的所有属性时不太理想,因为这样显示出来只有一行。在前一个技能中我们解释了将一个对象转换为一个哈希表能解决这个问题。它实际上是将一个网格视图工作在“列表视图”模式。
因为这个方法在许多场景中十分有用,以下是一个封装好的名为 ConvertObject-ToHashTable 的函数,以及一系列示例代码:
1 | function ConvertObject-ToHashTable |
PowerShell 技能连载 - 用网格视图窗口显示列表视图(第 1 部分)
一个最简单的硬件清单功能可以用一行代码实现:
1 | $data = systeminfo.exe /FO CSV | ConvertFrom-Csv |
一个更现代的方法是使用新的 Get-ComputerInfo cmdlet:
1 | $data = Get-ComputerInfo |
一个最简单方法是用 Group-Object 创建一个哈希表:将原始数据用某个属性,例如 UserName` 来分组。然后,在网格视图窗口中显示哈希表的键。当用户选择了一个对象时,将选中的项目作为哈希表的键,找到原始项目:
1 | $data = Get-ComputerInfo |
现在网格视图窗口以更好的方式显示信息。这段代码用 Get-Member 来查找信息对象 $data 中暴露的属性名。它接下来创建一个哈希表,每个属性代表一个键,每个值代表一个属性值。
本质上,网格视图窗口现在显示的是多个键值对,而不是单一的一个对象。
PowerShell 技能连载 - 快速创建逗号分隔的字符串(第 2 部分)
在前一个技能中我们演示了如何用 PowerShell 命令模式方便地创建引号包围的字符串列表。这可以很方便地创建代码,节省很多打字工作。
以下是一个在日常 PowerShell 编码工作中有用的函数:
1 | function s+ { "'$($args -join "','")'" | Set-ClipBoard } |
下一次您在代码中需要一个引号包围的字符串列表时,只需要键入:
1 | PS> s+ start stop pause end whatever |
执行完之后,引号包围的字符串就会存在您的剪贴板中,接下来您可以将它们粘贴到任何需要的地方。