✅ 第3天课后作业答案与解析
作业1:编写函数 Get-LargeFiles
🎯 要求
- 接受路径(
$Path)和最小大小(MB,$MinSizeMB) - 返回大于指定大小的文件列表
- 显示:文件名 + 大小(MB,保留2位小数)
✅ 参考答案
function Get-LargeFiles {
param(
[string]$Path = ".",
[double]$MinSizeMB = 10 # 默认10MB
)
# 验证路径是否存在
if (-not (Test-Path -Path $Path -PathType Container)) {
Write-Error "路径不存在或不是目录: $Path"
return
}
# 获取所有文件(递归)
$files = Get-ChildItem -Path $Path -File -Recurse -ErrorAction SilentlyContinue
# 筛选大文件并格式化输出
$files | Where-Object { $_.Length -gt ($MinSizeMB * 1MB) } |
Select-Object Name,
@{Name="SizeMB"; Expression={[math]::Round($_.Length / 1MB, 2)}},
FullName
}
🔍 使用示例
# 查找当前目录下大于 50MB 的文件
Get-LargeFiles -Path . -MinSizeMB 50
# 使用默认参数(当前目录,>10MB)
Get-LargeFiles
💡 解析要点
[double]$MinSizeMB:允许输入小数(如 0.5 MB)1MB:PowerShell 内置常量 = 1024 × 1024 字节- 计算属性
@{Name="SizeMB"; Expression={...}}:动态生成新列 -ErrorAction SilentlyContinue:跳过无权限访问的文件,避免中断Write-Error:抛出非终止错误,符合 PowerShell 规范
作业2:用 while 实现“猜数字”游戏(1–100)
🎯 要求
- 随机生成 1–100 的整数
- 用户输入猜测值
- 提示“太大”/“太小”,直到猜中
- 猜中后显示尝试次数
✅ 参考答案
# 生成随机数(1 到 100)
$target = Get-Random -Minimum 1 -Maximum 101
$guess = 0
$count = 0
Write-Host "🎮 欢迎玩猜数字游戏!范围:1–100" -ForegroundColor Cyan
while ($guess -ne $target) {
$input = Read-Host "请输入你的猜测"
# 验证输入是否为数字
if (-not ($input -match '^\d+$')) {
Write-Host "❌ 请输入一个有效的整数!" -ForegroundColor Red
continue
}
$guess = [int]$input
$count++
if ($guess -lt $target) {
Write-Host "📈 太小了!再试试。" -ForegroundColor Yellow
} elseif ($guess -gt $target) {
Write-Host "📉 太大了!再试试。" -ForegroundColor Yellow
} else {
Write-Host "🎉 恭喜你!猜中了!答案是 $target,共尝试 $count 次。" -ForegroundColor Green
}
}
💡 解析要点
Get-Random -Maximum 101:上限是开区间,所以 101 才能包含 100-match '^\d+$':正则验证输入是否为纯数字(防崩溃)continue:跳过本次循环,重新提示输入- 用户体验:彩色提示 + 清晰反馈
作业3:用 switch 模拟简易菜单
🎯 要求
- 循环显示菜单:
请选择操作: 1. 显示当前日期 2. 显示进程数量 3. 退出 - 根据输入执行对应操作
✅ 参考答案
do {
Clear-Host # 清屏(可选)
Write-Host "===================="
Write-Host " 简易系统菜单"
Write-Host "===================="
Write-Host "1. 显示当前日期"
Write-Host "2. 显示进程数量"
Write-Host "3. 退出"
Write-Host "===================="
$choice = Read-Host "请输入选项 (1-3)"
switch ($choice) {
'1' {
Write-Host "📅 当前日期和时间: $(Get-Date)" -ForegroundColor Green
Pause # 按任意键继续
}
'2' {
$procCount = (Get-Process).Count
Write-Host "📊 当前运行进程数: $procCount" -ForegroundColor Green
Pause
}
'3' {
Write-Host "👋 再见!" -ForegroundColor Cyan
}
default {
Write-Host "⚠️ 无效选项,请输入 1、2 或 3。" -ForegroundColor Red
Start-Sleep -Seconds 1
}
}
} while ($choice -ne '3')
💡 解析要点
do...while:确保至少执行一次菜单switch匹配字符串'1'而非数字1:因为Read-Host返回的是字符串Pause:Windows 特有命令,等效于Read-Host "按回车继续..."Clear-Host:清屏提升体验(Linux/macOS 用clear,但Clear-Host跨平台)
📌 总结:核心知识点回顾
| 作业 | 涉及语法 | 关键技巧 |
|---|---|---|
| 1 | 函数、参数、计算属性、管道过滤 | 错误处理 + 单位转换(MB) |
| 2 | while、Get-Random、正则验证 | 用户输入校验 + 友好交互 |
| 3 | switch、do...while、Read-Host | 菜单循环 + 字符串匹配 |
✅ 完成这三项作业,你就掌握了:
- 如何封装可复用逻辑(函数)
- 如何与用户交互(循环 + 输入)
- 如何用
switch替代冗长的if/elseif
1415

被折叠的 条评论
为什么被折叠?



