跳到主要内容

Windows 命令总结

时来谁不来,时不来谁来。

DOS 命令

  1. help:查看 cmd.exe Shell 内置命令及帮助。(非内置命令使用/?查看帮助,个别命令内置 help 子命令,如 net、netsh)
  2. where:默认在当前目录和 PATH 环境变量指定路径下查找符合搜索模式的文件,相当于 linux 下的 whereis。【where * | findstr task | findstr exe 可以查询任务管理相关的 exe 命令】
  3. find/findstr:在文件中寻找字符串,相当于 linux 下的 grep,但 findstr 支持的功能更强一些,字串表达支持轻正则表达式、不支持通配符表达。【例,(1)findstr "str1 str2" test.txt 寻找匹配 str1 或 str2 的行;(2)findstr /c "str1 str2" test.txt 寻找匹配 "str1 str2" 的行。(*)参数 /i、/n、/v、/m、/b 忽略大小写、显示行号、反向匹配、显示匹配的行的文件名、从头开始搜索,这配合/c 在多个搜索条件下似乎有用。】
  4. mklink:创建软硬链接文件。
  5. taskschd.msc:计划任务图形化面板。
  6. schtasks:计划任务管理。【故障处理:(1)找不到命令:补充 path 路径。(2)无法加载列资源:通过 chcp 437 切换 cmd 为英文语言,通过 chcp 936 切换回中文语言。】【(1)schtasks.exe /query /fo list [ /tn test ] 查询指定任务或全部任务;(2)schtasks.exe [ /run | /end ] /i /tn test 立即 运行/停止 指定任务的程序;(3)schtasks.exe /create /sc minute /mo 5 /tn test-name /tr "cmd.exe /c 'whoami > C:\test.txt'" /ru "system" 新建名为 test-name 的计划任务,让其每 5 分钟以 system 身份执行 cmd 命令。(4)schtasks.exe /create /sc onstart /tr "cmd.exe /c 'whoami > C:\test.txt'" 新建开机启动任务。(*)注意:涉及弹窗口执行的计划任务需要以“只在用户登录时运行”的方式执行,否则无效果。】
  7. tasklist/taskkill:进程管理。【tasklist /V /FI "STATUS eq running" 过滤正在运行的进程,并以详情的方式输出;taskkill /f /fi "IMAGENAME eq powershell.exe" 强制删除所有 powershell 的进程。】
  8. reg:注册表管理(regedit 图形化管理)。
  9. sc:服务管理。
  10. set/path:查看环境变量和 PATH 变量的值。
  11. dir:查看目录中的文件。【参数/q、/r、/s 显示文件所有者的组、显示文件的备份数据流、递归列出目录中的请文件】
  12. rmdir/del:删除文件夹(del 只能删除文件或递归删除文件夹中的文件,而保留文件夹)。【rmdir /s test\ 递归删除整个文件夹;del /s test\ 递归删除文件夹中的所有文件。】
  13. tree:以树形的方式显示文件夹结构。【tree /f /a 以 ASCII 的方式显示文件夹中的每一个文件名。】
  14. move:移动文件及重命名。
  15. icacls:文件权限管理,控制 文件-属性-安全 下各用户及组对该文件的读写、执行权限,相当于 linux 下的 chmod 和 chown。【icacls.exe C:\test.txt /grant admin:(F) 授予 admin 用户能够完全控制 test 文件】
  16. attrib:显示或更改文件属性,如 隐藏、只读等属性,相当于 linux 下的 lsattr/chattr。
  17. takeown:查看文件所有者。【takeown.exe /f test.txt
  18. runas /user:administrator "cmd" :使用指定用户权限去执行命令,相当于 linux 下的 sudo。
  19. cmdkey /list:查看系统中保存的登录凭据【runas /savecred /user:user1 "cmd" 就是按照保存的凭据进行登录的,通过该命令新增凭据似乎不可行,还是要依赖首次登录其他应用由应用自身去保存,如 runas 和 mstsc 登录保存凭据。】。
  20. copy /b 123.jpg+456.zip 789.jpg:将图片和压缩包合并并显示为一张图片,将图片后缀更改为 zip 之后将显示压缩包内容,相当于 linux 下的 cat 123.jpg 456.zip > 789.jpg
  21. qwinsta/klist:显示/杀掉桌面会话。
  22. subst:将系统上任意文件夹映射为已挂载的驱动器,而非常见的映射网络驱动器。
  23. shutdown /r /fw /f /t 0:重启电脑并将其启动到 BIOS 设置中。
  24. 网络命令
  25. ipconfig:ipconfig /registerdns 手动强制更新 DNS 服务器中的客户端名称注册(当 DNS 启用动态更新时有效);ipconfig /[displaydns | flushdns] 查看、清空本地的 dns 缓冲列表;ipconfig /[release | renew]释放、重新申请 ip 地址信息。
  26. wf.msc:防火墙策略与规则管理图形化面板。【规则设置参考:入站阻止,出站允许,入站规则中逐条加入需要放行的规则。注意:远程启用防火墙时,切记先将防火墙的 tcp3389 入站规则打开,因为默认的是 udp3389 无效;
  27. netsh advfirewall:命令行设置防火墙。【(1)firewall add rule name = "allow80" protocol = TCP dir = in localport = 80 action = allow 添加一条访问 tcp80 端口的入站允许规则;(2)netsh advfirewall show allprofiles 查看所有配置文件的访问策略;(3)netsh advfirewall set publicprofile firewallpolicy blockinbound, allowoutboun 配置公用配置文件的出入站策略;(4)netsh advfirewall set publicprofile state on 启用公用配置的防火墙启用状态。注意:远程配置时,应该先配制策略及规则,然后再启用防火墙状态。
  28. netsh interface:命令行设置本地网卡配置。【(1)netsh interface ipv4 set address "本地连接" static 192.168.56.13 255.255.255.0 192.168.56.1 设置 "本地连接" 适配器的静态 ip 地址;(2)netsh interface ipv4 set address "本地连接" dhcp 设置 "本地连接" 适配器为 dhcp 自动获取;(3)netsh interface ipv4 set dnsserver "本地连接" static 8.8.8.8 primary 设置 "本地连接" 适配器的静态 dns】
  29. net view \\ip: 查看局域网内指定终端的机器开启了哪些共享。
  30. net share 查看本机开启的共享【net share ipc 开启 ipc 共享、net share ipc/del 删除 ipc 共享】
  31. net share testshare = c:\Users\admin\test /grant: Everyone, FULL 新建共享【新建共享并允许任何人可以访问此共享,但此时还需要注意的一点是,被共享的文件夹本身的‘属性-安全’选项卡中是否也赋予任何人可以访问的权限,否则即便文件被共享但其它计算机访问依旧是拒绝。验证共享是否可用简单方法:type \\pc-007\testshare\123.txt
  32. net use z: \\ip\sharename [pass /user: user1] 建立网络驱动器映射,将网络共享文件夹映射到本地 Z 盘。【当新建共享时只给 user1 用户授权,那么在非 user1 用户 cmd 下进行挂载时必须要指定 user1 的用户名和密码,否则提示访问拒绝】【net use [z: | *] /delete 将删除 z 盘或所有的映射连接】
  33. nbtstat:查询 NetBIOS 主机名称和 ip 对应表。例,nbtstat -n 查看本地 NetBIOS 表;nbtstat -c 查看缓存的远程 NetBIOS 名称及 IP 对应表。nbtstat -r 查看广播解析到的 NetBIOS 表;【目前存在 2 种方式的名称与 ip 解析服务:NetBIOS 和 DNS。DNS 属于集中式的手动维护(除域网络,域网络也支持自动维护),通过 TCP/UDP 的方式进行信息的查询。而 NetBIOS 属于分布式的自动维护(也可通过 WINS 进行集中管控),通过广播的方式进行名称的注册及查询故通常只能在局域网中存在。】
  34. netsh wlan show profile/netsh wlan show profile 'test' key = clear:连接过的所有 wifi 并可以查看指定 wifi 的密码。
  35. netsh interface portproxy add v4tov4 listenaddress = localaddress listenport = localport connectaddress = destaddress connectport = destportTCP 端口转发规则创建。
  36. PsTools 套件 常用命令 套件命令在域中可以工作得非常好,不必考虑过多权限问题,但在工作组中则是各种限制。
  37. psexec:在运行机器上运行各种系统命令,相当于 telnet 一样,但是不需要在远程机器安装 telenet 服务端。【psexec \\nbtname -u user -p pass -i cmd,初次执行 ps 系列的命令需要带 -u -p 选项进行登录,登录一次之后便可以直接使用 ps* \\nbtname
  38. psping:icmp、tcp 端口连通测试,以及网速测试。【测速:server:psping -s source: sourceport、client:psping -b -l 8192 -n 10000 source: sourceport
  39. psservice:管理远程机器的各种服务。
  40. 杂项
  41. rundll32.exe user32.dll,LockWorkStation:命令锁屏
  42. manage-bde.exe –lock d:BitLocker 解锁后无需重启电脑即可再次上锁。
  43. 技巧
  44. cmd 中切换当前工作目录到另一个分区的盘符目录时使用方法,此处以从家目录切换到 D:\tmp 为例:(1)cd /d D:\tmp(2)d: & cd tmp(3)d: 回车 cd tmp

PowerShell 命令

  1. 介绍:Powershell 是使用 .NET 框架构建的 Windows 脚本语言和 Windows shell 环境。Windows 允许 Powershell 直接从其 shell 界面执行 .NET 函数,大多数 Powershell 命令(被称为 cmdlet)就是用 .NET 编写的。不同于其他脚本语言和 shell 环境,cmdlet(Powershell 命令) 的输出结果是对象-这使得 Powershell 在某种程度上有种面向对象的概念; 这意味着运行 cmdlet (Powershell 命令)将允许我们对输出对象执行操作(也就是说将输出从一个 cmdlet 传递到另一个 cmdlet 会很方便)。【 cmdlet 是在 PowerShell 环境中使用的一种轻量级命令,它的正常书写格式是使用“动词-名词(Verb-Noun) ”形式来表示,官方动词 完整列表
  2. 包、模块、脚本的区别
    1. 包:可执行的应用软件,即 exe。 PackageManagement 模块中的 Find-Package、Get-Package、Install-Package 等 cmdlet 皆是为了二进制软件的管理。
    2. 模块:由一些 ps1 脚本或基于.net 的二进制文件共同被整合在一起而形成的 PS 包,以提供各种 cmdlet 命令被使用。 PowerShellGet 模块中的 Find-Module、Install-Module、Uninstall-Module 等 cmdlet 皆是为了从 PS 网络仓库 中查找模块并进行下载安装等操作。注意:此处的 Install-Module 仅代表模块被下载到了本地,而 powershell 环境中该模块还并未被 Import-Module。
    3. 脚本:由一个或多个 PowerShell 命令为实现某个任务而被整合在一个具有 .ps1 扩展名的纯文本文件,运行脚本与运行 cmdlet 非常类似。PowerShellGet 模块中的 Find-Script、Install-Script 等 cmdlet 皆是为了从 PS 网络仓库 中查找脚本并进行下载安装等操作。此处的下载仅是把脚本下载到了本地,然后就可以通过在 powershell 中直接调用脚本了(前提脚本所在的文件夹路径已经被添加在了 PATH 环境变量之中),不同于模块那样还需要进行 import 之后才能被使用。
    4. 模块相关的环境变量:$Env: PSModulePath【模块默认被下载并安装的路径】、
  3. 变量杂项:(1)数组【$nums=1..5、$nums = 2,0,1,2】、哈希表【$stu=@{ Name = "小明";Age="12";sex="男" }】(2)$var =(Get-Process).ProcessName ; $var.Count 将命令中的进程名数据全部输出给对象,此时便可以通过变量去读取该变量类型中内容的属性,但不能以 ($var).ProcessName 这种方式单独取出内容;(3)
  4. powershell -c "$CMD" 【通过赋值程序路径给变量,通过变量来启动程序时,很有效】;powershell -ep bypass -File test.ps1【当 powershell 初次使用执行策略还处在 Restricted 状态时,便可以通过此命令绕过执行策略以执行脚本】
  5. Get-Help/Update-Help:查看/更新命令的帮助手册以及示例。例,Get-Help Where-Object -Examples【查看 Where-Object 命令的使用示例】
  6. Get-Variable:显示当前会话的变量。但不包含环境变量,环境变量需通过 echo $env: 去查看,全局变量 $Global: 查看。
  7. Get-Member:获取对象的成员变量及函数。【"str" | Get-Member 便可查看字符串类型变量可以通过 "str".去调用的功能;(get-process) | Get-Member 获取 get-process 输出对象可调用的属性。】
  8. Get-Command:获取 cmdlets、functions、aliases 等命令的版本、来源模块等相关信息。例,Get-Command -Module PackageManagement【获取指定模块所提供的 cmdlet 命令】;Get-Command -Type Cmdlet | Sort-Object -Property Noun | Format-Table -GroupBy Noun【获取 Cmdlet 类型的命令并排序分组】
  9. Where-Object:根据属性值从命令返回集合中查找对象,类似于 grep。表达条件的选项很多,如:-GT、-Match、-eq 等。【Get-Service | Where-Object [-Property] Status -eq "Stopped" 从服务中找出已停止运行的服务】
  10. Invoke-Expression(iex):将字串当做命令在本地运行。【$Command = "Get-Process";Invoke-Expression $Command 执行 Get-Process 命令并返回输出结果;IEX(New-ObjectNet.WebClient).DownloadString("http://127.0.0.1/test.ps1"); test-func 通过类似 curl 命令的方式将脚本内容全部读取作为一个变量,然后通过 IEX 加载该变量中的脚本,然后就可以实现文件不落地执行脚本函数的效果】
  11. Invoke-RestMethod(irm):可发送自定义的 http 请求,类似于 curl 响应内容直接显示。
  12. Invoke-WebRequest(iwr):一个增强版的 irm ,它请求返回的相应是一个对象,故一般需要通过变量去接收。【$ret=iwr http://1.1.1.1/test.txt;$ret.content 通过此方式可呈现请求的文件内容;】
  13. Sort-Object:对返回内容进行排序,返回内容分为文本内容、返回集合值,集合值可以使用属性特性进行排序,而文本内容的排序则依赖于命令提供的选项。例, Get-ChildItem -Path C:\Test | Sort-Object Length, Name【对目录 test 下的文件根据长度和文件名进行排序】;Get-Content -Path C:\Test\ServerNames.txt | Sort-Object -Unique【对文本内容进行唯一性排序】
  14. Select-Object:选中符合条件的对象并返回。表达条件有-First、-Last、-Skip、-Unique、-Property 等。【Get-Process | Select-Object -Last 5 返回最后 5 个服务;Get-ChildItem | Select-Object -Property name 仅显示文件名的列; Get-ChildItem | Select-Object -Property name | Where-Object -Property name -Like .* 仅显示文件名列中以 . 开头的文件;】
  15. Write-Host:自定义输出,支持输出有颜色的文字。例, Write-Host "Red on white text." -ForegroundColor red -BackgroundColor white [-NoNewline]【输出白底红字,不换行功能在脚本中执行有效果,交互执行无效果】
  16. Write-Output:简单变量/值输出,支持管道符传递值给下一个命令。例,Write-Output "test output" | Get-Member【传递字符串对象给 Get-Member 命令,由此得知字符串对象内包含了哪些方法和变量值】
  17. Get-Member:列出一个对象内定义的所有方法及特性值。Powershell 中的对象类型特别广泛,如 Int、String、文件 IO、服务 ServiceController、进程 Process...等。例,Get-Service | Get-Member -View Extended【查看服务对象有哪些扩展的方法/属性】
  18. Start-Process:启动一个程序进程。例,Start-Process powershell -Verb runas -ArgumentList '-c "manage-bde.exe -lock f:"'【以管理员身份打开一个 powershell 进程,并传入参数】
  19. Write-Progress:显示进度条设置。例,for ($p=1; $p -lt 10; $p++) { Write-Progress -Activity "Starting..." -Status "Loding..." -PercentComplete $p -CurrentOperation "$p% Finished "; Start-Sleep 1} 【一个任务完成进度条。】
  20. Measure-Object:统计对象的字符、单词、行等数据,相当于 Linux 中的 wc 命令。例,Get-Command | measure【 统计 Get-Command 输出的命令数量】
  21. 杂项
  22. Base64 编解码:[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("test"))[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('dABlAHMAdAA='))

技巧

  1. 程序开机启动。(1)目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 系统级、C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 用户级(2)组策略-开机启动、注销(3)计划任务(4)注册表: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run(新建一个字串记录启动 cmd/bat/vbs 文件的路径,ps1 脚本系统默认并不会自动执行,需借助上面这些脚本来达成启动执行的效果。)
  2. 计划任务注意事项:(1)若自动执行一些只能以前台方式运行的任务时(通常是一些带窗口的程序),常规-安全选项 处应该选择“仅在用户登录时运行”的单选项,否则会执行失败;若是一些可以以后台方式运行的任务,则随意。(2)若待执行程序是一个 bat 脚本,那么启动程序处直接填写脚本的所在路径即可;若是一个 powershell 的脚本,那么启动程序应该填写 powershell.exe 的所在路径,需在参数中附带该脚本的所在路径。如,-command “*.ps1”(3)常规-配置 选择不同的系统时,任务导出的 xml 有细微差别。作用应该仅是此导出任务文件是否兼容其它不同操作系统的计划任务程序。(4)隐藏,指在“仅在用户登录时运行”时,脚本是否闪现 cmd 窗口的行为。
  3. 启动/停止后台进程(而不管该进程是不是带 GUI 的还是纯命令行交互的程序,如 notepad.exe):(1)powershell 脚本实现方式:Start-Process -WindowStyle Hidden command.exe -arg(2)VBS 脚本实现方式Set ws = CreateObject("Wscript.Shell");ws.run "command.exe -arg",vbhide【或 CreateObject("WScript.Shell").Run " command.exe -arg[",0](tcp://vnt.wherewego.top: 29872/)】(3)VBS 脚本停止后台进程 Dim Wsh;Set Wsh = WScript.CreateObject(" WScript.Shell ");Wsh.Run " taskkill /f /im alist.exe ",0;Set Wsh = NoThing;WScript.quit【此处的封号;实际文`件中应该是一个换行符】(4)注意:这两种启动进程的方式略有区别。Start-Process 启动的进程属于 powershell 的子进程,但杀掉 powershell 之后子进程不会一并被杀掉,而是独立成为用户进程。而双击 VBS 脚本启动的进程直接就是用户进程。【启动 VBS 的命令:Wscript、Cscript】
  4. 关于脚本、程序、守护程序:脚本和程序通常又分为 纯命令行、带窗口 两种,例如 VBS 中的 Wscript 和 Cscript 解释器的区别以及 Python 和 Wpython 的区别;而守护进程通常也指服务,可以注册为服务的程序必须符合系统服务的规范且肯定不能是可交互程序和带窗口程序,否则是无法启动的(由于大多数非交互命令行程序不具备这种规范,因此建议使用 nssm 程序统一进行管理,执行原理为:在注册表中注册各种服务,启动的时候是通过 nssm 进程进行衍生子进程的方式启动的。)。服务创建 sc create ServiceName binPath = 路径 start = auto 即可注册成功,通过 sc delete ServiceName 便可以将服务取消注册。注册服务的目的仅仅是为了方便进行启动/停止操作。