PowerShell 技能连载 - 修复 PowerShellGet 和 Publish-Module

Publish-Module 是一个 cmdlet,用于将模块发布(上传)到 NuGet 仓库。有时,此 cmdlet 会引发奇怪的异常。这种情况下的原因是 nuget.exe 的过时版本。该应用程序负责打包一个模块并保存为.nupkg 文件,并且在您第一次使用 Publish-Module 时会自动下载该应用程序。

要更正此问题并刷新您的 nuget.exe 版本,请运行以下命令:

1
Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile "$env:LOCALAPPDATA\Microsoft\Windows\PowerShell\PowerShellGet\NuGet.exe"

确保在此之后关闭并重新启动所有 PowerShell 会话。如果 Publish-Module 仍然拒绝工作,您可能需要运行以下命令(需要管理员权限):

1
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

PowerShell 技能连载 - 检测挂起的重启

下面的代码检测是否有挂起的重启:

1
2
$rebootRequired = Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"
"Pending reboot: $rebootRequired"

PowerShell 技能连载 - 禁用摄像头

寻求保护隐私吗?这是一个简短的脚本,用于在您的系统上查找已启用的摄像头,并让您禁用任何不想使用的摄像头:

1
2
3
4
  # find working cameras
$result = Get-PnpDevice -FriendlyName *Camera* -Status OK -ErrorAction Ignore |
Out-GridView -Title 'Select Camera Device To Disable' -OutputMode Single |
Disable-PnpDevice -Confirm:$false -Passthru -whatif # remove -WhatIf to actually disable devices)

PowerShell 技能连载 - 使用 SOAP Webservice

尽管 SOAP 尚未广泛用于公共的 Webservice(通常使用更简单的 REST 服务),但在内部,许多公司确实将 SOAP 用于他们的 Webservice。

PowerShell 具有出色的 SOAP 支持,因此您无需大量复杂的代码即可连接和使用 SOAP Webservice。这是少数剩余的免费公共 SOAP Webservice 之一(将德语“bankleitzahl”翻译成银行详细信息):

1
2
$o = New-WebServiceProxy -Uri http://www.thomas-bayer.com/axis2/services/BLZService?wsdl
$o.getBank('25050180')

如您所见,要开始使用 SOAP Webservice,您需要 Webservice 提供的 WSDL URL。此网页以 XML 格式返回整个接口定义,New-WebServiceProxy 根据此信息创建包装 SOAP 数据类型所需的所有代码。

一旦您可以访问(任何)SOAP Webservice,您就可以使用以下代码来检查其方法:

1
2
3
4
5
6
7
8
9
10
11
$o = New-WebServiceProxy -Uri http://www.thomas-bayer.com/axis2/services/BLZService?wsdl

# common methods
$blacklist = 'CreateObjRef', 'Dispose', 'Equals', 'GetHashCode', 'GetLifetimeService', 'InitializeLifetimeService', 'ToString', 'GetType'

# exclude async and common methods
$o | Get-Member -MemberType *method |
Where-Object Name -notlike '*Async*' |
Where-Object Name -notlike 'Begin*' |
Where-Object Name -notlike 'End*' |
Where-Object { $_.Name -notin $blacklist }

PowerShell 技能连载 - 通过 PowerShell 调用 COVID 服务

您想及时了解 Covid 疫情数据吗?试试这个简单的 webservice:

1
2
3
$result = Invoke-RestMethod -Uri "https://coronavirus-19-api.herokuapp.com/countries"

$result -match "Germany"

结果类似于:

country             : Germany
cases               : 4480066
todayCases          : 0
deaths              : 95794
todayDeaths         : 0
recovered           : 4215200
active              : 169072
critical            : 1336
casesPerOneMillion  : 53248
deathsPerOneMillion : 1139
totalTests          : 73348901
testsPerOneMillion  : 871788

PowerShell 技能连载 - 启用 Active Directory cmdlet

在服务器和客户端上,Windows 都附带了 “ActiveDirectory” PowerShell 模块。它添加了许多 cmdlet 来管理 Active Directory 中的用户和资源。

默认情况下,该模块是隐藏的。要在客户端上启用它,请以管理员权限运行:

1
2
$element = Get-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS*"
Add-WindowsCapability -Name $element.Name -Online

在服务器上,再次使用管理员权限并运行:

1
2
Install-WindowsFeature RSAT-AD-PowerShell
Add-WindowsFeature RSAT-AD-PowerShell

PowerShell 技能连载 - 四个 PowerShell 关键先决条件

如果您要切换到新计算机,您可能需要快速检查一下 PowerShell 是否设置正确。以下是您绝对应该检查的四件事:

1 检查 PowerShell 版本

运行 $PSVersionTable 以检查您的 PowerShell 版本。

1
2
3
4
5
6
7
8
9
10
11
12
PS> $PSVersionTable

Name Value
---- -----
PSVersion 5.1.19041.1237
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1237
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

由于 $PSVersionTable 是一个哈希表,您还可以将其转换为对象以选择某些属性:

1
2
3
4
5
PS> [PSCustomObject]$PSVersionTable | Select-Object -Property PSVersion, PSEdition

PSVersion PSEdition
--------- ---------
5.1.19041.1237 Desktop

如果 “PSEdition“ 是 “Desktop“,则您使用的是内置的 Windows PowerShell。应该是 5.1 版。任何旧版本均已弃用,使用旧版本可能会引发安全风险。由于 Windows PowerShell 功能齐全,因此没有超过 5.1 的新版本。

如果 “PSEdition“ 是 “Core“,那么您使用的是新的跨平台 PowerShell。当前版本为 7.1.5,更新频繁。

2 检查运行策略

如果你不能运行脚本,PowerShell 就没有意义了。执行策略应设置为 “RemoteSigned“(仅允许本地脚本)或 “Bypass“(位于任何地方的脚本都可以运行,包括下载的脚本):

1
2
PS> Get-ExecutionPolicy
Bypass

如果需要,使用以下代码来更改执行策略:

1
PS> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force

3 检查 PowerShellGet

PowerShellGet 是一个重要的附加组件,因为它代表了 PowerShell 包管理。使用 PowerShellGet,您可以通过 Install-Module 安装其他模块。如果此模块已过时,您可能无法再下载和安装其他模块:

1
2
3
4
5
PS> Get-Module -Name PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1 -Property Version

Version
-------
2.2.5

如果报告的版本低于 2.2.0,则需要更新此模块。如果您看到版本 1.0.0 或 1.0.1(最初随 Windows 一起提供并且此后从未更新过的初始模块),则尤其如此。

要更新该模块,您需要重新安装它及其必备的 PackageManagement 模块:

1
2
Install-Module -Name PowerShellGet -Scope CurrentUser -Force -AllowClobber
Install-Module -Name Packagemanagement -Scope CurrentUser -Force -AllowClobber

TLS 1.2 支持

最后要检查的是 Windows 是否设置为支持传输层协议 1.2:

1
2
PS> ([System.Net.ServicePointManager]::SecurityProtocol -band 'Tls12') -eq 'Tls12'
True

If this is $false, then your Windows still uses outdated settings, and PowerShell may not be able to connect to HTTPS: webservices and sites. You should update Windows. Meanwhile, you can manually enable TLS 1.2 on a per-application setting:
如果返回 $false,那么您的 Windows 仍然使用过时的设置,并且 PowerShell 可能无法连接到 HTTPS:网络服务和网站。您应该更新 Windows。同时,您可以在每个应用程序独立的设置上手动启用 TLS 1.2:

1
2
3
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor
[System.Net.SecurityProtocolType]::Tls12

PowerShell 技能连载 - 改进 PowerShell ISE 的帮助

仍有许多专业的脚本编写者使用内置 PowerShell ISE 编辑器,它仍然是一个快速可靠的脚本开发环境。如果您使用 PowerShell ISE,可能希望将它内置的帮助系统切换为在线帮助。请运行这段代码(在 PowerShell ISE 中):

1
PS> $psise.Options.UseLocalHelp = $false

运行此代码后,只要您在脚本窗格或控制台部分中单击命令,然后按 F1,PowerShell ISE 将对命令运行 Get-Help 并添加 -Online 开关参数,因此浏览器打开并显示复杂的、排版好的最新在线帮助。

尽管如此,您可能希望记住上面的命令:如果命令没有在线帮助,则可能仍有本地帮助文件。将 PowerShell ISE 选项恢复为 $true 将打开本地帮助。

PowerShell 技能连载 - 打开 Windows 设置对话框(快速)(第 2 部分)

上一个技能中,我们介绍了 Start-Process 支持的命令 “ms-settings:“,可用于打开各种 Windows 设置对话框。例如,要打开个人注册信息页面,请执行以下操作:

1
PS> Start-Process ms-settings:yourinfo

每当您需要经常打开特定对话框时,例如检查更新,那么现在可以直接做到:

1
PS> Start-Process ms-settings:windowsupdate-action

但是,您需要记住相当隐蔽的命令。您无法定义新的命令别名,因为这些代码不是命令,而是命令加参数。

但是,您可以为此做些什么,也就是创建简单的函数。当您需要方便地记忆命令参数时,这一直是一种好方法:

1
function update { Start-Process ms-settings:windowsupdate-action }

运行此代码后,您现在可以使用新的 “update“ 命令快速检查 Windows 更新。如果要保留这些功能,请将它们导出为一个 module,或将功能代码放入其中一个配置文件(自动启动)脚本中。 可以在 $profile 中找到默认配置文件脚本的路径。如果尚不存在,您可能必须创建文件。如果还没有允许脚本执行,请先启用它。

PowerShell 技能连载 - 打开 Windows 设置对话框(快速)(第 1 部分)

大多数对话框和 Windows 中的设置可以通过内部命令直接打开。Windows 10 的设置对话框可以用如下命令打开:

1
PS> Start-Process ms-settings:

要打开特定的设置页面,请添加其名称。例如,要快速打开“镜像显示”设置页面,请尝试如下代码:

1
PS> Start-Process ms-settings:quietmomentspresentation

以下是 Paolo Maffezzoli 整理的支持命令列表(谢谢):

Page Command (URI)
**Settings home page**
Settings home page ms-settings:
**System**
Display ms-settings:display
Night light settings ms-settings:nightlight
Advanced scaling settings ms-settings:display-advanced
Connect to a wireless display ms-settings-connectabledevices:devicediscovery
Graphics settings ms-settings:display-advancedgraphics
Display orientation ms-settings:screenrotation
Sound (build 17063+) ms-settings:sound
Manage sound devices ms-settings:sound-devices
App volume and device preferences ms-settings:apps-volume
Notifications & actions ms-settings:notifications
Focus assist (build 17074+) ms-settings:quiethours, OR ms-settings:quietmomentshome
During these hours ms-settings:quietmomentsscheduled
Duplicating my display (When I'm duplicating my display) ms-settings:quietmomentspresentation
Playing a game full screen (When I'm playing a game) ms-settings:quietmomentsgame
Power & sleep ms-settings:powersleep
Battery ms-settings:batterysaver
See which apps are affecting your battery life ms-settings:batterysaver-usagedetails
Battery Saver settings ms-settings:batterysaver-settings
Storage ms-settings:storagesense
Configure Storage Sense or run it now ms-settings:storagepolicies
Change where new content is saved ms-settings:savelocations
Tablet mode ms-settings:tabletmode
Multitasking ms-settings:multitasking
Projecting to this PC ms-settings:project
Shared experiences ms-settings:crossdevice
Clipboard ms-settings:clipboard
Remote Desktop ms-settings:remotedesktop
Device Encryption (where available) ms-settings:deviceencryption
About ms-settings:about
**Devices**
Bluetooth & other devices ms-settings:bluetooth, OR ms-settings:connecteddevices
Printers & scanners ms-settings:printers
Mouse ms-settings:mousetouchpad
Touchpad ms-settings:devices-touchpad
Typing ms-settings:typing
Hardware keyboard - Text suggestions ms-settings:devicestyping-hwkbtextsuggestions
Wheel (where available) ms-settings:wheel
Pen & Windows Ink ms-settings:pen
AutoPlay ms-settings:autoplay
USB ms-settings:usb
**Phone**
Phone ms-settings:mobile-devices
Add a phone ms-settings:mobile-devices-addphone
Your Phone (opens app) ms-settings:mobile-devices-addphone-direct
**Network & Internet**
Network & Internet ms-settings:network
Status ms-settings:network-status
Show available networks ms-availablenetworks:
Cellular & SIM ms-settings:network-cellular
Wi-Fi ms-settings:network-wifi
Show available networks ms-availablenetworks:
Manage known networks ms-settings:network-wifisettings
Wi-Fi Calling ms-settings:network-wificalling
Ethernet ms-settings:network-ethernet
Dial-up ms-settings:network-dialup
DirectAccess (where available) ms-settings:network-directaccess
VPN ms-settings:network-vpn
Airplane mode ms-settings:network-airplanemode, OR ms-settings:proximity
Mobile hotspot ms-settings:network-mobilehotspot
NFC ms-settings:nfctransactions
Data usage ms-settings:datausage
Proxy ms-settings:network-proxy
**Personalization**
Personalization ms-settings:personalization
Background ms-settings:personalization-background
Colors ms-settings:personalization-colors, OR ms-settings:colors
Lock screen ms-settings:lockscreen
Themes ms-settings:themes
Fonts (build 17083+) ms-settings:fonts
Start ms-settings:personalization-start
Choose which folders appear on Start ms-settings:personalization-start-places
Taskbar ms-settings:taskbar
**Apps**
Apps & features ms-settings:appsfeatures OR ms-settings:appsfeatures-app
Manage optional features ms-settings:optionalfeatures
Default apps ms-settings:defaultapps
Offline maps ms-settings:maps
Download maps ms-settings:maps-downloadmaps
Apps for websites ms-settings:appsforwebsites
Video playback (build 16215+) ms-settings:videoplayback
Startup (build 17017+) ms-settings:startupapps
**Accounts**
Your info ms-settings:yourinfo
Email & accounts ms-settings:emailandaccounts
Sign-in options ms-settings:signinoptions
Windows Hello face setup ms-settings:signinoptions-launchfaceenrollment
Windows Hello fingerprint setup ms-settings:signinoptions-launchfingerprintenrollment
Security Key setup ms-settings:signinoptions-launchsecuritykeyenrollment
Dynamic Lock ms-settings:signinoptions-dynamiclock
Access work or school ms-settings:workplace
Family & other people ms-settings:otherusers OR ms-settings:family-group
Set up a kiosk ms-settings:assignedaccess
Sync your settings ms-settings:sync
**Time & language**
Date & time ms-settings:dateandtime
Region ms-settings:regionformatting
Japan IME settings (where available) ms-settings:regionlanguage-jpnime
Pinyin IME settings (where available) ms-settings:regionlanguage-chsime-pinyin
Wubi IME settings (where available) ms-settings:regionlanguage-chsime-wubi
Korea IME settings (where available) ms-settings:regionlanguage-korime
Language ms-settings:regionlanguage OR ms-settings:regionlanguage-languageoptions
Windows Display language ms-settings:regionlanguage-setdisplaylanguage
Add Display language ms-settings:regionlanguage-adddisplaylanguage
Keyboard (removed in build 17083+) ms-settings:keyboard
Speech ms-settings:speech
**Gaming**
Game bar ms-settings:gaming-gamebar
Captures ms-settings:gaming-gamedvr
Broadcasting ms-settings:gaming-broadcasting
Game Mode ms-settings:gaming-gamemode
TruePlay (removed in version 1809+) ms-settings:gaming-trueplay
Xbox Networking (build 16226+) ms-settings:gaming-xboxnetworking
**Extras**
Extras (available when Settings app extensions installed) ms-settings:extras
**Ease of Access**
Display (build 17025+) ms-settings:easeofaccess-display
Mouse Pointer (Cursor & pointer, build 17040+) ms-settings:easeofaccess-cursorandpointersize OR ms-settings:easeofaccess-MousePointer
Text Cursor ms-settings:easeofaccess-cursor
Magnifier ms-settings:easeofaccess-magnifier
Color Filters (build 17025+) ms-settings:easeofaccess-colorfilter
Adaptive Color Filters Link ms-settings:easeofaccess-colorfilter-adaptivecolorlink
Night Light Link ms-settings:easeofaccess-colorfilter-bluelightlink
High Contrast ms-settings:easeofaccess-highcontrast
Narrator ms-settings:easeofaccess-narrator
Start Narratorafter sign-in for me ms-settings:easeofaccess-narrator-isautostartenabled
Audio (build 17035+) ms-settings:easeofaccess-audio
Closed captions ms-settings:easeofaccess-closedcaptioning
Speech (build 17035+) ms-settings:easeofaccess-speechrecognition
Keyboard ms-settings:easeofaccess-keyboard
Mouse ms-settings:easeofaccess-mouse
Eye Control (build 17035+) ms-settings:easeofaccess-eyecontrol
Other options (removed in version 1809+) ms-settings:easeofaccess-otheroptions
**Search (version 1903+)**
Permissions & history ms-settings:search-permissions
Searching Windows ms-settings:cortana-windowssearch
More details ms-settings:search-moredetails
**Cortana (build 16188+)**
Cortana ms-settings:cortana
Talk to Cortana ms-settings:cortana-talktocortana
Permissions ms-settings:cortana-permissions
More details ms-settings:cortana-moredetails
**Privacy**
General ms-settings:privacy
Speech ms-settings:privacy-speech
Inking & typing personalization ms-settings:privacy-speechtyping
Diagnostics & feedback ms-settings:privacy-feedback
View Diagnostic Data ms-settings:privacy-feedback-telemetryviewergroup
Activity history (build 17040+) ms-settings:privacy-activityhistory
Location ms-settings:privacy-location
Camera ms-settings:privacy-webcam
Microphone ms-settings:privacy-microphone
Voice activation ms-settings:privacy-voiceactivation
Notifications ms-settings:privacy-notifications
Account info ms-settings:privacy-accountinfo
Contacts ms-settings:privacy-contacts
Calendar ms-settings:privacy-calendar
Phone calls (removed in version 1809+) ms-settings:privacy-phonecalls
Call history ms-settings:privacy-callhistory
Email ms-settings:privacy-email
Eye tracker (requires eyetracker hardware) ms-settings:privacy-eyetracker
Tasks ms-settings:privacy-tasks
Messaging ms-settings:privacy-messaging
Radios ms-settings:privacy-radios
Other devices ms-settings:privacy-customdevices
Background apps ms-settings:privacy-backgroundapps
App diagnostics ms-settings:privacy-appdiagnostics
Automatic file downloads ms-settings:privacy-automaticfiledownloads
Documents ms-settings:privacy-documents
Pictures ms-settings:privacy-pictures
Videos ms-settings:privacy-documents
File system ms-settings:privacy-broadfilesystemaccess
**Update & security**
Windows Update ms-settings:windowsupdate
Check for updates ms-settings:windowsupdate-action
View update history ms-settings:windowsupdate-history
Restart options ms-settings:windowsupdate-restartoptions
Advanced options ms-settings:windowsupdate-options
Change active hours ms-settings:windowsupdate-activehours
Optional updates ms-settings:windowsupdate-optionalupdates OR ms-settings:windowsupdate-seekerondemand
Delivery Optimization ms-settings:delivery-optimization
Windows Security / Windows Defender ms-settings:windowsdefender
Open Windows Security windowsdefender:
Backup ms-settings:backup
Troubleshoot ms-settings:troubleshoot
Recovery ms-settings:recovery
Activation ms-settings:activation
Find My Device ms-settings:findmydevice
For developers ms-settings:developers
Windows Insider Program ms-settings:windowsinsider, OR ms-settings:windowsinsider-optin
**Mixed reality**
Mixed reality ms-settings:holographic
Audio and speech ms-settings:holographic-audio
Environment ms-settings:privacy-holographic-environment
Headset display ms-settings:holographic-headset
Uninstall ms-settings:holographic-management
**Surface Hub**
Accounts ms-settings:surfacehub-accounts
Team Conferencing ms-settings:surfacehub-calling
Team device management ms-settings:surfacehub-devicemanagenent
Session cleanup ms-settings:surfacehub-sessioncleanup
Welcome screen ms-settings:surfacehub-welcome
PowerShell 技术 QQ 群