ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

常见Powershell指令和DOS指令

常见Powershell指令和DOS指令 常见Powershell指令和DOS指令信安大二上正入门学习操作系统老师让我们熟悉常规PowerShell指令和DOS指令遂记录所学内容做好知识管理第一步。我让DeepSeek为我设计了几道题目, 便于我巩固知识点。PowerShell常见指令. Alias vs 真实命令PowerShell 为了照顾 Linux 和 CMD 用户的习惯内置了许多别名。但在写脚本时强烈建议使用官方全称以避免歧义并提高可读性。常用别名官方全称推荐在脚本中使用作用pwdGet-Location获取当前工作目录cdSet-Location切换目录ls/dirGet-ChildItem列出目录内容echoWrite-Output输出文本或对象到管线catGet-Content读取文件内容cpCopy-Item复制文件或目录mvMove-Item移动或重命名文件rmRemove-Item删除文件或目录 学习技巧在终端输入 Get-Alias ls即可查看 ls 背后的真实命令。输出与重定向符号 和 覆盖写入像推土机。执行时先清空目标文件原有的所有内容再写入新内容。 追加写入像流水账。保留目标文件原有的内容把新内容写到文件的最末尾。 .\ 是 PowerShell 中非常基础且极其重要的一个符号。它翻译过来就是“当前目录下的”。. \ 的含义.点代表当前目录Current Directory。 \反斜杠是 Windows 系统里的路径分隔符。所以.\task1.ps1 的意思就是“运行当前目录下的 task1.ps1 这个文件”。注意区分Write-Host 只能把文本打印到终端屏幕不能被重定向到文件而 Write-Output即 echo会被送入管道可以被 和 写入文件。3. 面向对象输出带来的“困扰”PowerShell 经常会有大量输出。比如输入 Get-Date 或 Get-Location终端会输出几百行类似 DisplayHint : DateTime、PSPath : Microsoft.PowerShell.Core\FileSystem::… 的属性列表。原因PowerShell 是基于 .NET 的面向对象语言返回的是一个“对象”。 如何只提取关键信息 使用点属性或格式化输出 powershell (Get-Location).Path # 只输出路径字符串 (Get-Date).ToString(yyyy-MM-dd) # 只输出日期字符串代码练习#1.pwdGet-Date#2.mkdir os_lab cd os_lab#3.dir#4.echoWelcome to OS lecture#5.echoHello World.\fqb.txt#6.echoHello.\fqb.txt#7.cat.\fqb.txt#8.cpfqb.txt fqb2.txt#9.mvfqb2.txt fqb3.txt#10.rmfqb3.txt#11.dir.\filelist.txtdir.\filelist.txt踩坑记录坑 1VS Code 里的黄波浪警告写 pwd 时VS Code 提示‘pwd’ is an alias of ‘Get-Location’. Alias can introduce possible problems and make scripts hard to maintain.原因VS Code 的 PowerShell 插件自带代码质检员PSScriptAnalyzer建议在脚本中避免使用别名。 解决新建一个 PSScriptAnalyzerSettings.psd1 配置文件并在 VS Code 中配置路径或者直接改成全称推荐初学者直接用全称。坑 2套娃文件夹 (os_lab\os_lab\os_lab…)运行脚本几次后我发现路径变成了practice\os_lab\os_lab\os_lab...。原因脚本缺乏“幂等性”。每次运行都会无条件执行 mkdir os_lab 和 cd os_lab。如果不退出当前目录就再次运行就会在现有文件夹里再建一个同名文件夹。 解决在创建文件夹前加判断并使用绝对路径 powershell $labPath C:\Users\你的用户名\Desktop\practice\os_lab if (!(Test-Path $labPath)) { New-Item -ItemType Directory -Path $labPath } Set-Location $labPath#1.echo8 5 3 7|measure-object-Sum-Max-Min-Average#2.echoHello World|Measure-Object-Property Length-Sum#3.$filePathC:\Users\15808\Desktop\practice\filelist.txtif(Test-Path$filePath){Get-Content$filePath|Measure-Object-Property Length-Average}else{Write-Warningthe filelist.txt can not be found.}#4.echoHello World|Out-FileFilePath.\hello.txt#5.echoWelcome to OS|Out-FileFilePath.\hello.txt-Append#6.ls|sortWrite-Hosttask2 is finished.本次任务最终跑通的命令涵盖了 PowerShell 最常用的几个核心模块。1. 数据输出与管道指令/符号作用示例echo(Write-Output)将内容输出到屏幕或管道echo 8 5 3 7|(管道)把前一个命令的输出作为后一个命令的输入echo 8 5 3 7 | Measure-Object裸引号直接输出字符串PowerShell 特性等价于 echoHello World | Out-File hello.txt2. 统计与测量指令作用示例Measure-Object测量对象的数值属性体检员-Sum(和),-Maximum(最大),-Minimum(最小),-Average(平均),-Property Length(测量长度)3. 文件读写与目录管理指令作用示例Test-Path判断文件/文件夹是否存在常用于容错if (Test-Path $FilePath) {...}Get-Content读取文件内容按行拆成字符串对象Get-Content filelist.txtOut-File将输出写入文件-FilePath(指定路径),-Append(追加模式), 默认覆盖ls(Get-ChildItem)列出当前目录内容ls -Exclude *.txtsort(Sort-Object)对输入对象进行排序ls | sort4. 辅助工具指令作用cd ../cd 文件夹切换当前工作目录pwd查看当前终端的完整路径Select-Object挑选对象的特定属性常用-ExpandProperty提取纯字符串Remove-Item删除文件或文件夹#任务 3变量与算术对应文件第 5、6 节#目标掌握变量 $、单双引号、算术运算和数组。#要求新建 task4.ps1完成#1.定义变量 $name你的名字$port8081。$name你的名字$port8081#2. 定义 $todayThursday。$todaySunday#3.分别用单引号和双引号输出 Today is $today 和 Today is $today观察区别。Today is $todayToday is$today#4. 定义变量 $v1the covid in guangzhou赋值给 $v2并输出 $v2。$v1the covid in guangzhou$v2$v1$v2#5. 计算 6/2 和 6/25观察整数和浮点数的区别。6/2 6/25#6. 定义 $x2$y4。计算 $x$y、$x*$y、$x/$y。$x 2$y 4$x$y$x*$y$x/$y#7.定义一个数组 $v1,2,3输出它。$v1,2,3,4$v一、 核心语法点总结表查字典必备为了方便查阅我将本次脚本涉及的语法点整理成了下表类别语法点 / 符号作用代码示例核心CmdletGet-Process获取系统当前运行的所有进程对象。Get-Process核心CmdletStop-Process结束一个或多个进程。Stop-Process -Name notepad核心CmdletWrite-Host向控制台打印输出文本常配合颜色参数美化终端。Write-Host Hello -ForegroundColor Green核心CmdletWhere-Object过滤命令从管道传过来的集合中筛选符合条件的对象。... | Where-Object { $_.Id -eq 123 }核心CmdletFormat-Table格式化输出将对象以表格的形式展示指定属性。Get-Process | Format-Table Name, Id管道与对象|(管道符)将左边命令的输出结果对象作为右边命令的输入。Get-Process | Stop-Process管道与对象$_当前对象在Where-Object的脚本块{ }中代表当前处理的对象。Where-Object { $_.ProcessName ... }管道与对象.(点号)属性访问符用于获取对象的某个属性值。$_.ProcessName(获取进程名)变量与运算符$变量赋值符用于将数据存入变量。$procs Get-Process变量与运算符-like模糊匹配运算符配合通配符*使用。$_.ProcessName -like *notepad*流程控制if...else条件分支语句根据条件真假执行不同代码块。if ($procs) { ... } else { ... }参数与细节-Force强制参数忽略系统确认提示直接执行。Stop-Process -Force参数与细节n反引号n字符串中的换行转义字符。Write-Host 第一行n第二行参数与细节.\执行当前目录脚本的路径前缀。.\task5.ps1疑惑 为什么在 VS Code 里执行会突然报错connect ETIMEDOUT问题重现在 VS Code 运行脚本时弹出错误窗口connect ETIMEDOUT \\\\.\pipe\PSES_xxx脚本无法继续运行。原因排查这不是脚本代码写错了这是 VS Code 的 PowerShell 扩展进程与后台的 PowerShell 编辑器服务PSES之间的命名管道Named Pipe通信超时了。#1.Get-Process#2#3.$processGet-Process|Where-Object{$_.ProcessName-like*notepad*}if($process){Write-Hostthe notepad has been found.-ForegroundColor Green$process|Format-TableProcessName,Id,CPU-AutoSize$process|Stop-Process-Force}else{Write-Hostthe notepad can not be found.}#目标一次性掌握 if、switch、while、do until、for、foreach。#要求新建 task5.ps1把下面所有控制语句写在一个脚本里用 Write-Host 打印提示词分隔不同结构#1.if定义一个变量 $score 85。如果大于 90 输出 A如果大于 80 输出 B否则输出 C。使用 -gt。$sorce85if($sorce-gt90){Write-HostA}elseif($socre-gt80){Write-HostB}else{Write-HostC}#2. switch定义 $day Monday用 switch 输出对应中文“星期一”。$dayMondayswitch($day){Monday{Write-Hostoutput xingqiyi}default{Write-Hostoutput unknow}}#3. while用 while 循环输出 1 到 5。$i1while($i-le5){Write-Host$i$i}#4. do until用 do until 循环输出 1 到 3条件是大于 3 时停止。$j1do{Write-Host$j$j}until($j-gt3)#5. for用 for 循环倒计时输出 5 到 1。for($k5;$k-ge1;$k--){Write-Host$k}#6. foreach定义一个数组 $fruits Apple, Banana, Orange用foreach遍历输出。$fruitsApple,Banana,Orangeforeach($fruitin$fruits){Write-Host$fruit} 六大控制结构核心语法表结构名称语法格式核心特点适用场景精简示例if / elseif / elseif (条件) { ... }elseif (条件) { ... }else { ... }互斥执行一旦满足即跳出条件分支判断if ($score -gt 90) { A }switchswitch ($变量) {匹配值 { ... }default { ... } }多值精确匹配支持通配符/正则多固定值判断switch ($day) { Monday { 星期一 } }whilewhile (条件) { ... }先判断后执行可能一次都不执行未知次数的循环while ($i -le 5) { $i }do untildo { ... } until (条件)先执行后判断至少执行一次必须执行一次的场景do { $j } until ($j -gt 3)forfor (初始化; 条件; 迭代) { ... }计数循环控制最灵活已知循环次数/倒计时for ($k5; $k -ge 1; $k--) { ... }foreachforeach ($元素 in $集合) { ... }自动遍历集合无需索引遍历数组/集合foreach ($f in $fruits) { ... }PowerShell 特有运算符对照表PowerShell不使用、、等符号而是使用字母组合这是写脚本时最容易踩坑的地方。逻辑含义PowerShell 运算符其他语言常见写法示例大于-gt(Greater Than)$score -gt 90大于等于-ge(Greater or Equal)$i -ge 1小于-lt(Less Than)$i -lt 5小于等于-le(Less or Equal)$i -le 5等于-eq(Equal)$day -eq Monday不等于-ne(Not Equal)!$day -ne MondayfunctionGreet-User{param([string]$Name,[int]$Age)Write-OutputHello$Name, you are$Ageyears old.}在函数内部使用 param() 块来声明该函数可以接收哪些参数。注意param() 块必须是函数体内的第一个语句。PowerShell 是弱类型语言但为了代码的健壮性强烈建议在 param() 块中为参数指定数据类型如 [string]、[int]、[bool] 等在输出字符串时使用双引号 可以实现变量替换。“Hello $Name”PowerShell 会自动将 $Name 替换为变量实际的值。注意如果使用单引号 ’ 则不会进行变量替换会原样输出 $Name用函数时可以直接按顺序传递参数位置参数也可以指定参数名传递命名参数推荐写法可读性更高。位置传参Greet-User “张三” 20命名传参Greet-User -Name “张三” -Age 20在函数中输出结果推荐使用 Write-Output可以省略不写直接写变量或字符串默认就是输出到管道。这与 Write-Host 不同Write-Output 会将对象写入管道方便后续脚本进行二次处理例如 | Out-File 写入文件DOS常见指令Shell 实验指令与脚本汇总一、指令知识点总表类别指令 / 语法作用示例对应题目文件系统dir列出目录内容dir任务 1文件系统dir /s递归列出子目录内容dir /s任务 1文件系统dir /p分页显示dir /p任务 1文件系统dir /?查看命令帮助dir /?任务 1文件系统cd切换目录cd D:\Lecture任务 1文件系统cd ..返回上级目录cd ..任务 1屏幕cls清屏cls任务 1中断Ctrl C停止当前命令dir /s后按任务 1批处理echo off关闭命令回显echo off任务 2批处理REM注释REM 这是注释任务 2输出echo输出字符串echo Hello任务 2、3输出echo.输出空行echo.任务 2、3参数%1第一个参数echo %1任务 2、3、4、5、6、7参数%2第二个参数tasklist /FI PID le %2任务 6文件筛选DIR %1\*.txt列出指定目录 txt 文件DIR %1\*.txt任务 3文件筛选DIR %1\*.pdf列出指定目录 pdf 文件DIR %1\*.pdf任务 3条件IF条件判断IF %11 echo ...任务 4条件IF NOT反向判断IF NOT %13 echo ...任务 4条件IF ... ELSE IF ... ELSE多分支判断IF %1 (...) ELSE ...任务 6变量SET设置变量SET end%1任务 5循环FOR /L %%G IN (1,1,%1) DO计数循环FOR /L %%G IN (1,1,10) DO echo %%G任务 5进程tasklist列出进程tasklist任务 6、7进程tasklist /FI PID ge %1过滤 PID 参数tasklist /FI PID ge 100任务 6进程tasklist /FI PID le %2过滤 PID 参数tasklist /FI PID le 500任务 6进程tasklist /FI PID lt %1过滤 PID 参数tasklist /FI PID lt 1000任务 7Linux#!/bin/bash指定 Bash 解释器#!/bin/bashLinux 实验Linuxchmod x添加执行权限chmod x cpu_usage.shLinux 实验Linux./脚本.sh运行脚本./cpu_usage.shLinux 实验Linuxps -eo自定义进程输出列ps -eo pid,user,%cpu,%mem,commLinux 实验Linux--sort-%cpu按 CPU 降序排序ps ... --sort-%cpuLinux 实验Linuxawk文本过滤awk NR1 || $3 0.0Linux 实验LinuxNR1保留标题行awk NR1 ...Linux 实验Linux$3 0.0第三列大于 0.0awk $3 0.0Linux 实验二、DOS / CMD 题目脚本echo off REM scriptname: myname.bat REM scriptfunction: display basic batch processing commands, receive parameters and output REM creatingdate: 2026-9-21 echo myname.bat is now running echo. echo Hello %1!—echo off REM 1.output script running prompt echo Listing files under diectory %1 ... REM 2.output a blank line echo. REM 3.list %1\*.txt dir %1\*.txt REM 4.output a blank line echo. REM 5.list %1\*.pdf dir %1\*.pdf pauseecho off IF %1 ( echo Usage: testif 1/2/3 exit /b ) REM IF statement that must be used IF %11 echo you enter 1 IF %12 echo You enter 2 IF NOT %13 echo It was not 3!!!echo off REM assign the first passed parameter to the variable end SET end%1 FOR /L %%G IN (1,1,%end%) DO echo repetition n. %%Gecho off echo Processes with PID within a given range echo. if %~1 ( REM without parameters:print all processes tasklist ) else if %~2 ( REM with a parameter: print PID parameter1 process tasklist /FI PID ge %1 ) else ( REM with 2 parameters: print PID parameter1 and PID parameter2 process tasklist /FI PID ge %1 /FI PID le %2 )echo off if %~1 ( echo [usage] printpid.bat [PID upper limit] echo [default]no parameter provided ,using default upper limit 1000 set limit1000 )else ( set limit%~1 ) tasklist /FI PID lt %limit%2026年9月27号我在大二上学期写下了人生的第一篇博客我想把他作为我知识管理的工具培养输出型习惯。格式上会比较没有章法会慢慢找到自己的风格。作为双非信安虽然自己起步较晚玩了一年。但我的梦想依旧滚烫我仍然会朝着自己的理想不断前进
返回列表