PowerShell 技能连载 - 通过鼠标滚轮控制 PowerShell 的透明度
在 Windows 10 中,当按下 CTRL
+SHIFT
并滚动鼠标滚轮,就可以方便地控制控制台窗口的透明度,包括 PowerShell 控制台窗口。
在 Windows 10 中,当按下 CTRL
+SHIFT
并滚动鼠标滚轮,就可以方便地控制控制台窗口的透明度,包括 PowerShell 控制台窗口。
以下是获取当前 Windows 产品序列号的单行代码:
1 | (Get-WmiObject -Class "SoftwareLicensingService").OA3xOriginalProductKey |
在前一个技能中我们解释了如何用 PowerShell 将 PDF 文档发送到缺省的 PDF 打印机。这个通用方案对于简单场景是没问题的,但是无法让用户指定打印机。
如果使用特定的软件可以控制更多内容,因为您可以使用该软件暴露的特殊功能。
以下示例使用 Acrobat Reader 来打印到 PDF 文档。它展示了如何使用 Acrobat Reader 中的特殊选项来任意选择打印机,此外 Acrobat Reader 打印完文档将会自动关闭。
1 | # PDF document to print out |
如要自动打印 PDF 文档,不幸的是无法使用 Out-Printer
。Out-Printer
只能发送纯文本文档到打印机。
不过,请看一下代码:
1 | # adjust this path to the PDF document of choice |
假设您已经安装了可以打印 PDF 文档的软件,这段代码将会把文档发送到关联的程序并自动将它打印到缺省的打印机。
一些软件(例如 Acrobat Reader)执行完上述操作之后仍会驻留在内存里。可以考虑这种方法解决:
1 | # adjust this path to the PDF document of choice |
Windows 中带有适用于 Linux 的 Windows 子系统 (WSL) 功能,您可以通过它来运行各种 Linux 发型版。通过提升权限的 PowerShell 来启用 WSL:
1 | Enable-WindowsOptionalFeature -FeatureName Microsoft-Windows-Subsystem-Linux -Online |
下一步,在 Windows 10 中打开 Microsoft Store,并且搜索 “Linux”。安装某个支持的 Linux 发行版(例如,Debian)!
这是全部的步骤。您现在可以在 PowerShell 里或通过开始菜单打开 Debian。只需要运行 “Debian” 命令。当您首次运行时,您需要设置一个 root 账号和密码。
您也许已经知道,PowerShell 是跨平台的,并且可以运行在 Linux 上。如果您希望使用新的 Debian 环境并且测试在 Linux 上运行 PowerShell,请在 Debian 控制台中运行以下代码:
1 | sudo apt-get update |
下一步,从 Debian 中,运行 “pwsh
“ 命令切换到 PowerShell 6。
以下是一行返回由当前用户 SID 解析成名字的代码:
1 | ([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Translate( [System.Security.Principal.NTAccount]).Value |
您可能会反对说查询 $env:username
环境变量来完成这个目的更容易,的确是这样的。然而在许多场景将 SID 转换为名字很有用。例如,如果您必须知道某个常见账户或组的确切(本地)名字,例如本地的 Administrators 组,只需要使用语言中性的 SID 来翻译它:
1 | PS> ([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544').Translate( [System.Security.Principal.NTAccount]).Value |
类似地,以下代码总是列出本地的 Administrators,无论是什么语言的操作系统:
1 | $admins = ([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544').Translate( [System.Security.Principal.NTAccount]).Value |
以下是一行返回当前用户 SID 并且可以用于登录脚本的代码,例如:
1 | ([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value |
以下是一个扫描本地或远程系统端口的一个直接的方法。您甚至可以指定一个超时值(以毫秒为单位):
1 | function Get-PortInfo |
扫描端口现在变得十分简单:
1 | PS> Get-PortInfo -Port 139 -TimeoutMilliseconds 1000 |
在 PowerShell 控制台里很容易把控制台颜色搞乱。一个不经意的调用意外地改变了颜色值,或者脚本错误地设置了颜色,可能会导致意外的结果。要验证这种情况,请打开一个 PowerShell 控制台(不是编辑器!),并且运行这段代码:
1 | PS> [Console]::BackgroundColor = "Green" |
要快速地清除颜色,请运行这段代码:
1 | PS> [Console]::ResetColor() |
接着运行 Clear-Host
可以清空显示。
有些时候当您尝试连接 WEB 服务时,PowerShell 可能会弹出无法设置安全的 SSL 通道提示。
让我们来深入了解一下这个问题。以下是一段调用德国铁路系统 WEB 服务的代码。它应该返回指定城市的火车站列表:
1 | $city = "Hannover" |
不过,它弹出了一系列关于 SSL 连接问题的异常。通常,这些错误源于两种情况:
要解决这些情况,只需要运行以下代码:
1 | # ignore invalid SSL certificates |
只要执行一次,对当前的 PowerShell 会话都有效。以上代码现在能够正常返回 Hannover 地区的车站信息。而且如果深入地了解该对象的模型,您甚至可以通过 PowerShell 订火车票。
name nummer
---- ------
Hannover Hbf 8000152
Hannover-Linden/Fi. 8002586
Hannover-Nordstadt 8002576
Hannover Bismarckstr 8002580
Hannover-Ledeburg 8002583
Hannover-Vinnhorst 8006089
Hannover-Leinhausen 8002585
Hannover Wiech-Allee 8002591
Hannover Ander.Misb. 8000578
Hannover Flughafen 8002589
Hannover-Kleefeld 8002584
Hannover-Bornum 8002581
Hann Münden 8006707
HannoverMesseLaatzen 8003487