PowerShell 使用
Practice
常用命令
vim $PROFILE # 编辑配置文件
Get-ChildItem *> $null # 抛弃所有输出
whoami
Remove-Item -Recurse -Force <dir> # rm -rf
Start-Process <dir> # macOS 中的 open,alias start
Get-Help <string> -Online
Get-Command <string> # sh 中的 which
Get-Command pwsh | Select-Object Source # 只输出 Get-Command 返回对象的 Source 属性;Select-Object 也可以用 select 代替
Get-Service sshd
Start-Service sshd
Set-Service -StartupType Automatic sshd
Update-Help -UICulture en-US # 更新 PowerShell 帮助文档
Unblock-File course.ps1 # 取消阻止从 Internet 下载的文件
Get-Content
命令也可以显示变量值:Get-Content Env:PATH
常用环境变量
$Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890" # 设置环境变量
$Env:http_proxy="";$Env:https_proxy="" # 清除环境变量
$Env:Path -split ';' | sls python # 查看环境变量并筛选 python
$Env:Path += ';C:\Tools'
$Env:USERNAME
配置文件位置:$PROFILE
关于脚本:about_Scripts
安装 PowerShell 7
winget search Microsoft.PowerShell
winget install --id Microsoft.Powershell --source winget
Oh My Posh
安装
winget install JanDeDobbeleer.OhMyPosh -s winget
Oh My Posh 更新很快,有时会被杀毒软件误报,可以考虑将可执行文件路径
(Get-Command oh-my-posh).Source
加入杀毒软件的白名单。
更新
winget install JanDeDobbeleer.OhMyPosh -s winget
安装字体
oh-my-posh font install # 在管理员权限下运行
官方推荐
MesloLGM NF
字体
启用 Oh My Posh
notepad $PROFILE # 编辑 PowerShell 配置文件
向配置文件中添加如下内容:
oh-my-posh init pwsh | Invoke-Expression
Oh My Posh 的主题文件夹位置保存在环境变量 $Env:POSH_THEMES_PATH
中。可以通过命令以下命令查看。
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json"
PowerShell 101
什么是 101 课程
我们常说的 "101课程",通常是指 XXXX 的入门级课程。在美国,数字 "101" 是大学课程中普遍使用的介绍性课程编号,是对某一个主题的综览课程。因为许多教程的第一章或者导论部分都会用 "101" 做标注,这个词汇渐渐的就被引申了出来,用来表示基础入门级课程,变成了一个代号,也就是基础课程的同义词。
注释
$a = 1 # 单行注释
<#
多行注释
$b = 2
#>
变量
变量名以 $
开始,不区分大小写:
$a = 1
$b = 2
$result = $a * $b
$result # 输出变量
自动变量
变量名 | 描述 |
---|---|
$? |
上一个命令的退出状态,如果上一个命令执行成功,则 $? 的值为 True ,否则为 False |
$args |
传递给脚本的参数,是一个数组 |
$HOME |
用户主目录 |
$PWD |
当前工作目录 |
字符串
$s1 = '$a * $b = $result' # 单引号字符串中的变量不会被解析
$s2 = "$a * $b = $result" # 双引号字符串中的变量会被解析
$s3 = "line1`nline2" # PowerShell 使用 ` 作为转义符
$s4 = $(Get-Date) # 命令替换
PowerShell cmdlets
PowerShell 命令被称作 cmdlet
(发音 command-let),每个cmdlet 的名字由一个动词-名词对组成,例如 Get-Process
。当你要查找一个 cmdlet 时,可以指定筛选 cmdlet
的动词或者名词。
cmdlet
是原生 PowerShell 命令
PowerShell 命令不区分大小写
帮助系统
PowerShell 中的三个核心 Cmdlets:
Get-Command
Get-Help
Get-Member
Get-Help
help *process* # help process
help Get-Help -Full
help Get-Help -Online
help Get-Help -Parameter Name
help Get-Help -Examples
Update-Help
函数
help
的使用体验要比 cmdletGet-Help
更好,help
一次只显示一页内容,使用空格键翻页。
Update-Help 失败
Update-Help -UICulture en-US
解决 powershell 7.1 的 Get-Help 找不到对应的详细帮助 | CSDN
Get-Command
Get-Command
用来定位命令
Get-Command -Verb Get
Get-Command -Noun Process
Get-Command -Name Get-Process
Get-Command -Name *service* -CommandType Cmdlet, Function, Alias # 使用通配符搜索时最好限制一下命令类型
# 更好的做法是指定 Verb 或 Noun 或同时指定
Get-Command | Get-Random | Get-Help -Full # Learn a PowerShell command a day
Microsoft Docs: PowerShell 101
Reference
Command Syntax
方括号表示可选项
尖括号是内容占位符,表示参数的 .NET 类型
类型后面的 []
表示该参数可以接受多个值,用逗号分隔:
Get-Process [-Name] <string[]>
Get-Process -Name Explorer, Winlogon, Services
花括号表示枚举,表示参数的可选值:
-Option {None | ReadOnly | Constant | Private | AllScope}
-Option ReadOnly
Microsoft Docs: about_Command_Syntax
About Parameter
Microsoft Docs: about_Parameters
参数名和参数值可以用空格分隔,也可以用冒号分隔:
-<parameter_name> <parameter_value>
-<parameter_name>:<parameter_value>
使用 Get-Help
cmdlet 获取命令参数信息:
Get-Help Get-ChildItem
Get-Help Get-Member -Parameter * # 获取关于 Get-Member 的所有参数的信息
Appendix
Windows Commands
常用命令
REM 注释
HELP [command] REM man
ECHO REM 显示消息,或将命令回显打开或关闭
CD REM 显示当前目录的名称或将其更改
CLS REM 清除屏幕
START REM 启动单独的窗口以运行指定的程序或命令
SET Path REM 显示环境变量 Path
SET var=val REM 设置环境变量 var 的值为 val
TYPE REM cat
COPY REM cp
MOVE REM mv
RENAME [drive:][path]filename1 filename2 REM 重命名文件
REPLACE [drive1:][path1]filename [drive2:][path2] REM 替换文件
DIR REM ls
MKDIR REM mkdir
DEL REM rm
RMDIR /S REM rmdir, 递归删除
MKLINK REM 创建符号链接和硬链接
ATTRIB REM 显示或更改文件属性
ICACLS REM chmod, 显示、修改、备份或还原文件和目录的 ACL
TREE [drive:][path] REM 显示目录结构
TASKLIST REM ps
TASKKILL REM kill
PATH [[drive:]path[;...]][;%PATH%] REM 将 %PATH% 包括在新的路径设置中会将旧路径附加到新设置
SHUTDOWN /s /t 30 REM 允许通过本地或远程方式正确关闭计算机
SC query sshd REM 查询服务的状态
CMD REM 打开另一个 Windows 命令解释程序窗口
EXIT REM 退出 CMD.EXE 程序(命令解释程序)
ACL: Access Control List
流程控制命令
FOR REM 为一组文件中的每个文件运行一个指定的命令
IF REM 在批处理程序中执行有条件的处理操作
LABEL REM 创建、更改或删除磁盘的卷标
GOTO REM 将 Windows 命令解释程序定向到批处理程序中某个带标签的行
感兴趣的命令
ATTRIB REM 显示或更改文件属性
CALL REM 从另一个批处理程序调用这一个
CHCP REM 显示或设置活动代码页,中国地区默认是 936 (GBK),可以设置为 65001 (UTF-8)
CHKDSK REM 检查磁盘并显示状态报告
COMP REM 比较两个或两套文件的内容
DOSKEY REM alias
FC REM 比较两个文件或两个文件集并显示它们之间的不同
FIND REM 在一个或多个文件中搜索一个文本字符串
FINDSTR REM 在多个文件中搜索字符串
MODE REM 配置系统设备(也可以查看代码页)
MORE REM 逐屏显示输出
PAUSE REM 暂停批处理文件的处理并显示消息
POPD REM 还原通过 PUSHD 保存的当前目录的上一个值
PUSHD REM 保存当前目录,然后对其进行更改
RECOVER REM 从损坏的或有缺陷的磁盘中恢复可读信息
REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)
ROBOCOPY REM 复制文件和目录树的高级实用工具
SETLOCAL REM 开始本地化批处理文件中的环境更改
SCHTASKS REM 安排在一台计算机上运行命令和程序
SORT REM 对输入排序
SYSTEMINFO REM 显示计算机的特定属性和配置
XCOPY REM 复制文件和目录树
常用环境变量
%CD% REM 当前工作目录
%USERPROFILE% REM 用户主目录
%PATH%
%PATH:str1=str2% REM 环境变量替换增强
%USERPROFILE%
包含了驱动器名,而%HOMEPATH%
则不包含驱动器名
Windows 注册表
Windows registry for advanced users - Windows Server | Microsoft Learn