命令行环境下的 Windows

Windows Powershell 的 Microsoft.PowerShell.Core 管理单元中文文档

https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core

Windows Powershell 基本语法

单个命令分行 `

连接多个命令 ;

管道函数 |

输入输出重定向

Windows Powershell Cmdlet / Function

PowerShell Cmdlet 通常以动词-名词的形式命名例如 Get-HelpNew-ItemCopy-Item

Cmdlet 可以接收和返回 .NET 对象这意味着可以将一个 cmdlet 的输出直接传递给另一个 cmdlet而不需要解析文本或格式化输出

文件操作 Powershell Cmdlet 可以用 -Path 显式指定下一个参数为被操作文件的路径

Get-Help 获取帮助信息

查看某个命令的详细帮助信息例如 Get-Help certutil 将返回命令 certutil 的详细帮助信息

Get-Command 使用通配符 * 搜索命令

在只记得命令的一部分的时候搜索相关命令例如 Get-Command New* 将返回所有以 New 开头的命令

New-Item 创建新的文件

New-Item... 等同于 linux bash 中的 touch ...

例如 New-Item helloworld.c 将在当前工作路径下创建一个名为 helloworld.c 的新文件

Get-ItemProperty 获取文件或文件夹的属性

Get-ItemProperty ... 将返回文件 ... 的属性

PS > Get-ItemProperty .\python-is-the-best-pl.md

    目录: ...

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2024/5/1     16:42            502 python-is-the-best-pl.md

访问 CreationTimeLastWriteTime 属性将返回文件的创建/最后修改日期

PS > (Get-ItemProperty -Path .\python-is-the-best-pl.md).CreationTime

20245116:42:46

对返回的 .NET 对象使用 ToString() 方法可以将其转换为所需要的格式

PS > (Get-ItemProperty -Path .\python-is-the-best-pl.md).CreationTime.`
>> ToString("yyyy-MM-dd HH:mm:ss")

2024-05-01 16:42:46 

Get-Command -Name 获取别名

(Get-Command -Name ...).Source 等同于 linux bash 中的 which ...将在环境变量设置的目录里查找符合条件的文件返回指令的绝对路径

PS > Get-Command -Name g++

CommandType     Name               Version    Source
-----------     ----               -------    ------
Application     g++.exe            0.0.0.0    C:\mingw64\bin\g++.exe

Windows Tools

利用 certutil 工具计算文件的哈希值

PS > certutil -hashfile .\hello.exe SHA256
SHA256 的 .\hello.exe 哈希:
17b6ba1b851e565769ec917b497e60b825f9ee79acd72f3ffed5a66777c79b66
CertUtil: -hashfile 命令成功完成

可选的哈希函数有 MD2MD4MD5SHA1SHA256SHA384SHA512

更多选项使用命令 certutil -hashfile -? 查看或者在 Powershell 中使用 Get-Help certutil 查看

利用 dotnet 检查已安装的 .NET SDK 与运行时

dotnet --list-sdks
dotnet --list-runtimes

See:
https://learn.microsoft.com/zh-cn/dotnet/core/install/how-to-detect-installed-versions?pivots=os-windows

利用 netsh 查看与修改 Windows 的 TCP 协议排除端口范围

在 Windows 的终端中通过 netsh int ip show excludedportrange protocol=tcp 查询操作系统的 TCP 协议被排除端口范围

通过 netsh int ip add excludedportrange protocol=tcp numberofports=1 startport=3121 为上面的范围添加排除项

注意需要先停止 NAT 服务 net stop winnat

执行成功后可以看到在 netsh int ip show excludedportrange protocol=tcp 查询的返回结果中3121 端口右侧出现了一个 *

PS > netsh int ip show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      3121        3121     *
      5426        5426
     50000       50059     *

* - 管理的端口排除.