声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:powershell(2)_哔哩哔哩_bilibili
一 、Powershell使用外部命令
在 Powershell 中,可以执行一些外部命令,这些命令通常位于系统环境变量中。而系统环境变量是操作系统用来存储配置信息的变量,比如文件路径、系统设置等。在 Windows 中,常见的环境变量包括 PATH
、TEMP
、SystemRoot
等。
Powershell调用外部命令的正确语法
在 PowerShell 中,执行外部命令时,通常需要在命令前加上 &
操作符。例如,&"notepad"
是正确的写法。这是因为 PowerShell 需要明确知道这是一个外部命令,而不是 PowerShell 内部命令。
例如,notepad
命令可以直接执行,因为它在 system32
目录下,而该目录在系统环境变量中
& "notepad"
直接执行不在系统环境变量中的命令时会发生报错。例如,wordpad
不在系统环境变量中,直接执行会失败。
因此,执行不在系统环境变量中的命令时,需要使用完整路径和 &
操作符来执行。
&"C:\Program Files\Windows NT\Accessories\wordpad.exe"
二 、Powershell命令集
PowerShell 中的命令(cmdlet)通常采用动名词的命名方式。例如,Get-Process
、Start-Service
等。这种命名方式对于英语较好的用户来说非常友好,因为它们直观地描述了命令的功能。
此外,PowerShell 兼容 CMD 中的命令,可以在 PowerShell 中直接打开 CMD 并执行 CMD 命令。这意味着在 PowerShell 中可以使用 CMD 中的所有命令,增加了 PowerShell 的灵活性和功能。
1.常用的命令集
系统信息
-
Get-ComputerInfo
获取计算机的详细信息,包括操作系统版本、硬件信息等。 -
Get-Process
列出当前运行的所有进程。可以使用-Name
或-Id
参数筛选特定进程。 -
Get-Service
查看系统服务的状态。可以使用-Name
参数筛选特定服务。 -
Get-NetIPAddress
获取网络接口的 IP 地址信息。
文件和目录操作
-
Get-ChildItem
(ls
或dir
)
列出目录中的文件和子目录。可以使用-Recurse
参数递归列出所有内容。 -
New-Item
创建文件或目录 -
Remove-Item
删除文件或目录 -
Copy-Item
和Move-Item
复制和移动文件或目录
网络操作
-
Test-Connection
测试网络连接,类似于ping
命令。 -
Get-NetAdapter
获取网络适配器信息。 -
Get-NetRoute
查看路由表信息。
用户和权限
-
Get-LocalUser
列出本地用户账户。 -
New-LocalUser
创建本地用户账户。 -
Get-LocalGroupMember
查看本地组成员。
任务和作业
-
Start-Process
启动一个新的进程。 -
Stop-Process
终止一个进程。 -
Start-Job
和Receive-Job
启动后台作业并获取作业结果。
脚本和模块
-
Import-Module
导入 PowerShell 模块。 -
Get-Command
获取可用的命令。可以指定模块或命令类型,可获取powershell的所有命令。 -
Get-Help
获取命令的帮助信息。
其他常用命令
-
Clear-Host
(cls
或clear
)
清空控制台屏幕。 -
Set-ExecutionPolicy
设置脚本执行策略。 -
Get-Date
获取当前日期和时间。 -
Write-Output
和Write-Host
输出内容到控制台。
三 、Powershell别名的使用
PowerShell 的别名使得命令更加易于记忆和使用。通过使用 Get-Help
命令,你可以查找任何命令的别名,并使用这些别名来简化你的工作流程。记住,别名和全称命令的效果是完全相同的,所以你可以放心地使用它们
1. 查找 PowerShell 命令的别名
要查找某个命令的别名,可以使用以下命令:
Get-Help <CommandName> -Full
例如,要查找 Get-Command
命令的别名,可以使用:
Get-Help Get-Command -Full
这将显示 Get-Command
命令的详细信息,包括它的别名。在这个例子中,Get-Command
的别名是 gcm
。
2. 使用别名
一旦你知道了某个命令的别名,就可以直接使用这个别名来执行命令。例如,Get-Command
的别名是 gcm
,所以你可以使用 gcm
来代替 Get-Command
:
gcm
这将列出所有可用的 PowerShell 命令。
3. 多个别名
有些命令可能有多个别名。例如,Get-ChildItem
命令有多个别名,包括 ls
、dir
和 gci
。你可以使用这些别名中的任何一个来执行 Get-ChildItem
命令:
ls
dir
gci
这些命令都会列出当前目录中的文件和文件夹。
4. 查询别名对应的全称命令
当我们知道一个命令的别名之后,我们可以通过这个命令的别名查找出对应的全称命令
(1)查询特定别名对应的全称命令:
使用 Get-Alias
命令,后跟 -Name
参数,可以查询特定别名对应的全称命令。
示例:
Get-Alias -Name ls
Get-Alias -Name dir
(2)查找以特定字符开头或结尾的命令:
使用 Get-Alias
命令结合管道操作符 |
和 Where-Object
命令,可以筛选出以特定字符开头或结尾的命令。
示例:
Get-Alias | Where-Object { $_.Definition.StartsWith("Remove") }
这条命令就可以查询出Remove开头的命令
(3)复杂的筛选和排序
查找所有别名信息:
使用 Get-Alias
命令结合管道操作符 |
和 Group-Object
命令,可以按别名对应的实际命令定义进行分组,然后使用 Sort-Object
命令对分组结果进行排序。
Get-Alias | Group-Object Definition | Sort-Object -Descending Count
解释
-
Get-Alias
:获取当前会话中已定义的所有命令别名。 -
Where-Object
:筛选出满足特定条件的别名信息。 -
Group-Object
:按别名对应的实际命令定义进行分组。 -
Sort-Object
:对分组结果进行排序,可以按对象数量的多少进行降序排序。
5.自定义别名
如果系统的命令实在是不好记忆,可以使用自定义别名来对应命令。
(1)创建别名:
使用 Set-Alias
命令创建自定义别名。例如,将 notepad
命令的别名设置为 pad
:
Set-Alias -Name pad -Value notepad
创建别名后,可以直接使用别名 pad
来启动记事本程序。
注意:通过 Set-Alias
创建的别名只在当前 PowerShell 会话中有效,关闭 PowerShell 窗口后别名将不再存在。
(2)删除别名
使用 Remove-Item
命令删除别名,例如删除 pad
别名:
Remove-Item Alias:pad
或者使用 del alias:pad
命令(这是 Remove-Item
的别名)。
(3)导出别名
使用 Export-Alias
命令将别名导出到一个文件中,例如将别名导出到 demo.ps1
文件:
Export-Alias -Path demo.ps1
(4)导入别名:
使用 Import-Alias
命令导入别名,例如导入 demo.ps1
文件中的别名:
Import-Alias -Path demo.ps1
使用 -Force
参数强制导入,即使文件中的别名已存在:
Import-Alias -Path demo.ps1 -Force