第12章《学以致用》—PowerShell 自学闭环与实战笔记
第12章《学以致用》—PowerShell 自学闭环与实战笔记(高分版)
这篇笔记不再灌输“新概念”,而是把你已掌握的指令、搜索、模块与帮助系统,串成一套能直接落地的自学闭环,并用两个可复现的实战任务把它“拧紧”:
① 修改本地账户 Privileges(用户特权);② 创建可用的 SMB 共享。
目录
-
一、目标与环境
-
二、PowerShell 自学五步闭环
-
三、实战 A:修改本地用户特权(Privileges)
- 1)在本地探索:Help / Get-Command
- 2)转向 Gallery:Find-Module / Install-Module
- 3)摸清模块:Get-Command -Module / Get-Help
- 4)枚举与变更特权:Get-Privilege / Add-Privilege
- 5)验证与回滚
-
四、实战 B:创建并验证 SMB 文件共享
-
五、常见坑与避坑建议
-
六、临门一脚:你的个人练习清单
-
七、复盘卡片(收藏备用)
一、目标与环境
- 目标:学会自行定位命令 → 获取模块 → 读懂帮助 → 组合命令 → 验证回滚的完整路径。
- 演示环境:Windows 10/11 或 Windows Server 2012 R2+,PowerShell 5.0+(建议以管理员身份运行)。
- 权限说明:本章涉及修改本地安全策略、创建共享等系统操作,请在实验机或虚拟机中练习。
二、PowerShell 自学五步闭环
-
问问题(明确任务 & 关键词)
- 例:我想“修改本地用户可执行的系统级任务” → 关键词 privilege/privileges。
-
本地查(Help / Get-Command)
help *keyword*
、Get-Command -Noun/-Verb/-Module
,看看“有没有现成的”。
-
上仓库(PowerShell Gallery)
Find-Module
搜索、Install-Module
安装,小心不受信任源;先看作者与帮助。
-
读帮助(Get-Help -Full/-Examples)
- 重点看:语法参数、输入输出类型、示例。能否管道?是否支持 -WhatIf/-Confirm?
-
小步试(枚举 → 变更 → 验证 → 回滚)
- 先 Get 再 Set;先 -WhatIf 再执行;能加就能减,准备撤销命令。
记住这句:“先枚举(Get),后更改(Set/Add/Remove/Enable/Disable),再验证(Get/测试),最后留回滚(Remove/Disable)。”
三、实战 A:修改本地用户特权(Privileges)
任务:为本机管理员组添加/查看某项用户特权(例如 SeDenyBatchLogonRight)。这并非 NTFS 权限,而是 “能否执行某类系统范围操作” 的特权控制。
1)在本地探索:Help / Get-Command
help *privilege*
Get-Command -Noun *priv* # 如果没有命中,说明本机暂无相关 cmdlet
若本机无直接支持命令 → 转到 Gallery。
2)转向 Gallery:Find-Module / Install-Module
Find-Module *privilege* | Format-Table -Auto
Install-Module PoshPrivilege
安装来自不受信任源会提示确认;生产环境建议先审阅代码 / 指定可信源。
3)摸清模块:Get-Command -Module / Get-Help
Get-Command -Module PoshPrivilege | Format-Table -AutoGet-Help Add-Privilege -Full
Get-Help Get-Privilege -Examples
Get-Help Remove-Privilege -Examples
Get-Help Enable-Privilege -Examples
Get-Help Disable-Privilege -Examples
4)枚举与变更特权:Get-Privilege / Add-Privilege
列出全部特权与账户映射
Get-Privilege | Out-Host # 可能很多,先看看结构
只看某个特权的当前绑定
Get-Privilege -Privilege SeDenyBatchLogonRight
为“内置管理员组”添加一条特权(示例)
# 添加前先 -WhatIf 看看会做什么
Add-Privilege -AccountName 'BUILTIN\Administrators' `-Privilege SeDenyBatchLogonRight `-WhatIf# 确认无误后执行
Add-Privilege -AccountName 'BUILTIN\Administrators' `-Privilege SeDenyBatchLogonRight
5)验证与回滚
# 验证
Get-Privilege -Privilege SeDenyBatchLogonRight# 回滚(演示两种)
Remove-Privilege -AccountName 'BUILTIN\Administrators' -Privilege SeDenyBatchLogonRight
# 或禁用/启用某特权的生效(视模块实现而定)
Disable-Privilege -Privilege SeDenyBatchLogonRight
Enable-Privilege -Privilege SeDenyBatchLogonRight
小结:路径清晰、可验证、可回滚,这就是“学以致用”的核心范式。
四、实战 B:创建并验证 SMB 文件共享
任务:创建
C:\Labs
目录,建立 SMB 共享 Labs,权限为 Everyone:读/写,Administrators:完全控制,并开启“文档缓存模式”,最后列出共享权限。
脚本(可一键执行)
# 1) 创建目录(存在则跳过)
$path = 'C:\Labs'
if (-not (Test-Path $path)) {New-Item -Path $path -ItemType Directory | Out-Null
}# 2) 创建 SMB 共享(已存在则跳过)
$shareName = 'Labs'
if (-not (Get-SmbShare -Name $shareName -ErrorAction SilentlyContinue)) {$share = New-SmbShare -Name $shareName `-Path $path `-Description 'MoL Lab Share' `-ChangeAccess 'Everyone' `-FullAccess 'Administrators' `-CachingMode Documents
}# 3) 展示共享权限
Get-SmbShareAccess -Name $shareName | Format-Table -Auto
验证点
Get-SmbShare
能看到Labs
;Get-SmbShareAccess -Name Labs
权限符合预期;- 资源管理器
\\localhost\Labs
可访问; - 需要跨机测试时注意 防火墙 / 网络发现 / SMB 版本。
清理(可选):
# 删除共享与目录(慎用)
Remove-SmbShare -Name Labs -Force
Remove-Item C:\Labs -Recurse -Force
五、常见坑与避坑建议
- 把 Privileges 当成 NTFS 权限:两者不是一回事;前者是“能否执行某类系统任务”的“特权”,后者是“对文件/目录的访问权限”。
- 忽视 -WhatIf / -Confirm:危险操作先演练,再执行。
- 无管理员权限:涉及安全策略、共享等操作,请以管理员运行。
- 在生产机上试错:请使用 虚拟机/快照;把“回滚命令”与“变更命令”成对保存。
- Gallery 盲装模块:先
Find-Module
→看作者/下载量→Get-Help
→再装;必要时审阅源码。 - 不读帮助示例:
Get-Help <Cmdlet> -Examples
常常就是直接可用的答案。
六、临门一脚:你的个人练习清单
- 用本文闭环,自主搜索“计划任务”模块,创建一个每小时运行的测试任务;
- 枚举 SeBackupPrivilege 拥有者,写脚本导出到 CSV;
- 把 SMB 共享脚本封装为函数:支持 自定义共享名/路径/权限,带 -WhatIf;
- 为脚本补上 Try/Catch 与日志输出(
Start-Transcript
或自写日志函数)。
七、复盘卡片(收藏备用)
- 关键词 → 本地查 → 上仓库 → 读帮助 → 小步试 → 验证回滚
- 先 Get 后 Set,先
-WhatIf
后执行; - 能加就能减:准备 Remove/Disable 作为回退;
- 管理员权限 + 虚拟机快照 = 安全感;
- 帮助示例 是效率密码:
Get-Help Name -Examples
。
结语
“学以致用”的关键,不是你记住了多少命令,而是你遇事不慌、定位路径、快速验证的能力。把这套闭环练熟,你就能在 PowerShell 的世界里“自我造血”,越走越稳。祝你玩得开心、改得放心、回得干净。