下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.4 PowerShell Cmdlet 常用命令

在PowerShell中有哪些Cmdlet命令会频繁使用?来看看如图4.34所示的PowerShell Cmdlet脑图,这是管理员们使用非常频繁的命令。我们接下来将和大家一起分享部分命令的具体使用方法。

图4.34 Cmdlet常规系统命令

4.4.1 New-Item 新建项目

在PowerShell中New-Item可以说是使用频率相当高的命令,它的目标是新建,我们可以通过New-Item命令建立文件、目录、注册表等对象。它的使用方法如图4.35所示。

图4.35 New-Item命令使用方法

我们可以利用New-Item 建立文件,命令操作非常简单,图4.36所示为创建文件的具体方法。

图4.36 创建文件的具体方法

也可以利用New-Item 命令进行目录的建立,执行如图4.37所示的命令可以完成目录的建立。

图4.37 新建目录命令

如果希望建立相对应的注册表键和注册表键值对,可以通过New-Item命令来建立,执行如图4.38所示的命令,即可完成注册表对象的建立。

图4.38 新建注册表对象

4.4.2 Remove-Item 删除项目

如果需要删除文件、目录和注册表键值,可以通过Remove-Item 命令来实现,图4.39所示为删除单一文件命令。

图4.39 删除单一文件命令

我们也可以使用Remove-Item删除文件目录,如图4.40所示。

图4.40 删除文件目录

如果希望删除注册表键值的话,可以使用如图4.41所示的Remove-Item命令删除注册表键值对。

图4.41 删除注册表键值对

4.4.3 Rename-Item更名项目

Rename-Item是进行文件和对象改名操作的命令,通常进行对象更名操作的是文件,利用Rename-Item 就可以实现对象的实际更名。图4.42所示为命令的帮助内容。

图4.42 更名命令的帮助内容

我们可以通过如图4.43所示的命令来实现文件对象的更名。

图4.43 文件对象更名

4.4.4 Get-Item 获取对象信息

很多朋友会将Get-Item和Get-ChildItem混淆,其实这两个命令的功能完全不同。如果希望获取目标的数据类型及属性相关信息,可以通过执行Get-Item实现属性及相关信息的获取。如果希望了解文件对象的目标和属性,通过执行如图4.44所示的命令可以实现。

图4.44 获取当前文件对象属性

Get-Item也可以获取注册表信息,通过执行Get-Item 跟上注册表键值路径,就可以获取到相关的注册表信息,执行如图4.45所示的Get-Item hklm:\software 命令,可以加载Hive路径,同时也可以获取Software键值对应的属性。

图4.45 获取当前注册表属性

4.4.5 Get-ChildItem 获取子目录文件

Get-ChildItem是PowerShell中使用相对比较频繁的命令,用来实现对象中的子集获取。以文件对象为例,通过Get-ChildItem获取文件夹下的文件数据,完成数据执行后数据的对象为文件系统,文件系统支持的属性和方法都会受到支持,图4.46所示为支持的属性和方法。

图4.46 文件对象支持的属性和方法

使用Get-ChildItem命令也可以获取到函数功能的对象,我们通过Get-ChildItem进行数据获取,获取当前函数的子属性都是函数类型,如图4.47所示的结果为函数子对象支持的属性和方法。

图4.47 函数子对象支持的方法和属性

4.4.6 Get-Content 获取文件内容

当我们希望获取当前文件内容的时候,可以有多种不同方法进行内容数据的获取。Get-Content可以说是获取文件内容的第一命令,利用Get-Content 可以针对任意类型进行数据获取,如果是文本内容,直接读取为可以解析的字符,如果是图片或其他类型文件,以节码方式读取。图4.48所示为文件内容命令帮助。

图4.48 获取文件内容命令帮助

如果文件内容是基本的文件格式,如CSV或TXT等类型的数据,可以通过Get-Content的命令直接获取相应的内容,图4.49所示为获取文件内容的命令执行方式。

图4.49 直接获取文件内容的命令执行方式

而对于一些不能直接读取的数据,如Word文档,Excel文档或其他的二进制执行文件,我们使用Get-Content命令是否可以直接读取呢?当然也是可以的,图4.50所示为读取的二进制数据。

图4.50 读取二进制数据

4.4.7 Copy-Item文件复制

Copy-Item的功能是实现文件的复制,这里利用Copy-Item功能实现数据从源到目标路径的复制。图4.51所示为命令相关的帮助内容。

图4.51 文件复制命令帮助

使用Copy-Item命令有两个位置参数,其中的第零号位置就是源文件,第一位是目标文件路径和名字。提供两个参数就可以完成从源文件到目标文件的复制操作,图4.52所示为相关的操作步骤和方法。

图4.52 Copy-Item 复制文件操作

4.4.8 Set-Location 设置当前路径

在Command命令中如果希望转换目录,都是通过CD 进行目录转换,在PowerShell 中,依然可以这么做,但是这个CD 是不是 change-directory,可以通过Get-Alias 来看下是不是这个命令,图4.53所示为获取Set-Location命令。

图4.53 获取CD命令所代表的别名

这里可以发现,CD不再是单一命令,而是Set-Location PowerShell 命令的别名,通过Set-Location变更当前的目录。更改当前目录使用的是Set-Location c:\log 命令,图4.54所示为相关的操作。

图4.54 设置当前执行脚本路径

4.4.9 Get-Eventlog 获取当前日志状态

日志系统是系统中非常重要的功能,当需要进行问题诊断、事件查询等操作的时候,日志查询是一个非常重要的功能标准。日常针对日志操作也是管理员最为频繁的功能操作之一。对日志的查询操作是通过PowerShell Get-Eventlog Cmdlet 来进行的,图4.55所示为当前的Get-Eventlog命令的操作。

图4.55 获取Get-Eventlog 命令的帮助内容

如果大家希望知道当前日志系统提供的日志记录,可以通过如图4.56所示的命令来获取当前系统支持的日志名称。所有当前可用的日志列表如下。

图4.56 获取当前系统可用的日志列表

如果希望查找相关的日志,我们需要知道日志的名称,日志名称决定了如何获取内容类别,图4.57所示为获取相关的安全日志操作。

图4.57 系统安全日志数据获取

4.4.10 Get-Process 获取计算机进程

在PowerShell中使用Get-Process获取的是系统进程对象,通过Get-Process 命令获取到系统中当前运行的进程,使用Get-Process命令有多种不同的方式可以进行进程获取。在使用Get-Process的过程中没有跟上任何参数,则结果为当前所有进程,结果的类型为Process进程类型。图4.58所示为获取系统进程对象命令。

图4.58 获取系统进程对象命令

如果希望获取到特定名称的进程,可以在Get-Process后面跟上特定的进程名称来获取特定进程对象信息。图4.59所示为获取特定进程对象方法。

图4.59 获取特定进程对象方法

4.4.11 Stop-Process 停止进程

Stop-Process Cmdlet命令的作用是停止特定对象进程,在实际使用过程中Stop-Process很少单独使用,它通常和Get-Process命令一起使用,用于特定进程的终止。单独使用Stop-Process可以进行已有进程终止,如果进程本身不存在,则可能发生如图4.60所示的执行错误。

图4.60 停止不存在的进程会直接报错

Get-Process 支持管道输入,如果希望停止一系列名称的进程对象,则可以通过Get-Process 传入管道符右边的数据完成批量的进程停止。图4.61所示为相关的操作方法。

图4.61 批量暂停系统进程操作

4.4.12 Test-Connection Ping计算机状态

相信大家都使用过Ping 来获取到目标的返回时间,例如,我们通常使用Ping来获取计算机到www.baidu.com 的时间,使用如图4.62所示的命令来获取到百度具体时间。

图4.62 获取当前地址到百度地址的具体时间

PowerShell中有Test-Connection,同样可以获取当前的地址到目标地址的结果。相比Ping的方式,Test-Connection 获取的数据相对更加灵活,图4.63所示为我们直接获取当前Ping过程中的值。

图4.63 更加灵活地获取Ping的值

相信通过PowerShell的Test-Connection命令,能够帮助我们更加方便容易地实现Ping值结果的获取。

4.4.13 Test-NetConnection 获取端口状况

这个命令功能非常强大,替换了之前我们在Cmdshell中的3个命令。包含上面提到的Ping、Telnet和Tracert,都可以使用Test-NetConnection来进行操作。我们先来看下Test-NetConnection 帮助内容和操作,图4.64所示为Test-NetConnection的帮助内容。

图4.64 Test-NetConnection的帮助内容

使用这条命令可以显示Ping的状态实现,这里给大家分享一下如何实现Ping命令的案例。图4.65所示为命令执行结果,这里会发现执行的结果和上面提到的命令完全不同,命令仅仅会执行一次,并且得到相应的Ping的结果。

图4.65 执行Ping 命令的结果

如果希望了解到目标网络中的特定端口是否能够正常通信,我们可以使用如图4.66所示的命令来验证端口是否通畅,这和我们早期使用的Telnet命令非常相似。

图4.66 验证端口状态是否通畅

还有一个场景验证当前主机到目标主机的路由状况,这个也是通过Test-NetConnection来实现的,这里可以通过如图4.67所示的命令来实现当前IP到目标的路由状况,通过结果我们可以获取目标经过的路由和总共花费的时间。

图4.67 验证本地到目标地址的路由

4.4.14 Send-MailMessage 发送邮件

谈到这个命令,我们不能不说CMD时代进行邮件测试的痛苦经历。在那个时代我们测试靠的都是如图4.68所示的Telnet,Telnet测试邮件中只要错了一个命令,整行命令都会作废。而Send-MailMessage 能够非常完美地帮助我们解决这个问题。

图4.68 痛苦的Telnet邮件测试

现在解放管理员的PowerShell命令来了,也就是Send-MailMessage。目前所有的Windows平台都集成了Send-MailMessage 命令,可以执行如图4.69所示的PowerShell命令完成邮件系统测试。有了它完全可以忘记Telnet命令测试邮件状态的痛苦经历。

图4.69 邮件系统发送测试

经常会有朋友提到一个问题,我的邮件服务器究竟有没有被匿名中继?这个问题其实解决起来比较容易,我们可以执行如图4.70所示的代码完成匿名邮件功能测试。匿名中继的特点就是外部通过服务器可以直接发到外部,下面就是执行脚本代码。通过执行结果我们可以发现,当前的SMTP服务器是拒绝匿名中继。

图4.70 服务器匿名中继测试 4qce+1UKiQ5B7kYhGfj3o8v91Bai9q4I5j+Nyr903cbfQa1aZUz/+AWOCMJIDzD/

点击中间区域
呼出菜单
上一章
目录
下一章
×