PowerShell常用命令记录

获取版本号

PS C:\> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1682
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1682
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

环境变量

获取当前环境变量:

PS C:\> ls env:

或者通过 Get-ChildItem 命令:

PS C:\> Get-ChildItem -path ENV:

设置修改环境变量(下面例子设置 SSH_AUTH_SOCK 环境变量为 null 字符串):

PS C:\> $env:SSH_AUTH_SOCK='null'

删除环境变量(设置为空字符串就是删除):

PS C:\> $env:SSH_AUTH_SOCK=''

或者通过 Remove-Item 命令:

PS C:\> Remove-Item Env:\SSH_AUTH_SOCK

运行 cmd 命令

需要使用 cmd /c "<COMMAND>" 方式运行,例如运行 start 命令打开文件并获取返回值:

PS C:\> cmd /c "start /wait <file> & exit errorlevel"

过滤命令输出

可以使用 findstr 命令过滤命令的输出,findstr 默认区分大小写,增加 /i 参数忽略大小写:

PS C:\> XXX --help | findstr /i "resize"

也可以使用 PowerShell 的 Select-String(简写 sls)来过滤,,Select-String 默认不区分大小写,增加 -CaseSensitive 参数区分大小写:

PS C:\> XXX --help | sls "Auto" -CaseSensitive

base64

编码:

PS C:\> [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("https://wiki.zohead.com/"))
aHR0cHM6Ly93aWtpLnpvaGVhZC5jb20v

解码:

PS C:\> [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("aHR0cHM6Ly93aWtpLnpvaGVhZC5jb20v"))
https://wiki.zohead.com/

如果是 UTF-16 编码,可以把 [System.Text.Encoding]::UTF8 换成 [System.Text.Encoding]::Unicode

hash

获取 SHA256 hash 值:

PS C:\> Get-FileHash path-to-file
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          8C78C1FF580EF2468F4F62E98F7CD3D927808F42D3DBFD37E4A18172BE1AE132       path-to-file

获取 SHA512 hash 值并格式化成列表输出:

PS C:\> Get-FileHash path-to-file -Algorithm SHA512 | Format-List

将十六进制字符串 hash 值转换为 base64:

PS C:\> $hash = Get-FileHash path-to-file -Algorithm SHA512
PS C:\> [Convert]::ToBase64String([byte[]] -split ($hash.Hash -replace '..', '0x$& '))

如果是 PowerShell (Core) 7.1+ / .NET 5+ 以上版本,第二条命令可以直接用:

PS C:\> [System.Convert]::FromHexString($hash.Hash)

WMI 查询

可以直接使用 Get-WmiObject 命令进行 WMI 查询,例如获取 SMBIOS 信息:

PS C:\> Get-WmiObject -class Win32_Bios
PS C:\> Get-WmiObject -class Win32_BaseBoard
PS C:\> Get-WmiObject -class Win32_ComputerSystem

新版本 PowerShell 也可以使用 Get-CimInstance 命令,例如获取物理磁盘型号和序列号:

PS C:\> Get-CimInstance -Class Win32_DiskDrive | Select Model,SerialNumber

获取处理器名称和 CPUID:

PS C:\> Get-CimInstance -Class Win32_Processor | Select Name,Caption,ProcessorId

另外也可以使用 wmic 命令,例如获取 UUID 等信息:

PS C:\> wmic csproduct get uuid
PS C:\> wmic csproduct list full

获取驱动器列表

PS C:\> Get-PSDrive

获取物理磁盘列表

PS C:\> Get-Disk

获取 uptime

PowerShell 6.0 及以上版本可以直接使用 Get-Uptime 命令获取 uptime,老版本则需要计算一下:

PS C:\> (Get-Date) - (Get-CimInstance -Class Win32_OperatingSystem).LastBootUpTime