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

4.2 PowerShell Cmdlet 基本参数

Cmdlet 属于非常标准的“动词+名词”结构,对比CMD 命令,你一定惊叹于它的强大,除了标准的自然语言结构,Cmdlet也有一些自有特性。

4.2.1 Cmdlet 属性

PowerShell的Cmdlet 将.Net 的类标记为Cmdlet,所有的Cmdlet 执行的对象结果有基类,这些基类中也会属性,在Cmdlet的执行结果数据类型中有很多不同类型的属性。这部分内容将会在对象章节分享给大家。

4.2.2 Cmdlet 参数类型

Cmdlet参数用于进行数据获取或者执行操作中的属性定义,通过这些参数定义,我们可以执行特定的操作或者获取特定的基于参数定义的结果。PowerShell参数依据功能要求和定义,分为以下不同类型,这些类型在使用过程中存在不同的场景。

· Mandatory:强制参数是在PowerShell中必须设定的参数。

· Named:Named参数使用最为频繁,通常用于特定属性的定义。

· Position:基于位置的参数类型,使用较少,容易出错,不建议使用。

· Switch:基于Switch开关参数定义,通常用于二元操作。

1.参数类型之强制类型参数

强制类型参数在Cmdlet中比较常见,基本上新建、更新、配置等命令都需要针对特指的对象执行操作,这时就需要强制输入一个参数来确定针对的对象是谁。例如,需要创建文件,文件名称就是Cmdlet 强制类型参数。当我们使用New-Item创建新文件的时候,很多参数不一定是必需的,但是文件名称参数是必需的,像这样在执行命令时必须强制输入的参数我们称之为强制类型参数,如图4.4所示。

图4.4 PowerShell的强制类型参数

强制类型定义中如果不输入参数,将会导致整个命令执行失败,例如,我们直接输入新建文件命令,会出现要求输入参数,其实就是强制参数,这时候如果忽略输入强制类型参数的定义,将会出现如图4.5所示的直接报错提示。

图4.5 不输入强制参数导致执行出错

2.参数类型之Named 命名参数

Named 类型参数是进行相关属性设置的必要参数,例如,我们新建一个文件,它的路径和文件名都是Named的参数。这里选择Name参数作为文件名称创建在当前路径下,图4.6所示为新建文件Cmdlet的使用场景。

图4.6 新建文件过程中使用的Named参数

在这个例子中,存在着如下3个不同的参数类型。

· ItemType:定义对象的数据类型。

· Name:定义对象名称。

· Path:定义对象创建的目录路径。

前面提到了在使用新建(New)、修改(Set)、删除(Remove)等一系列命令时通常都会存在强制类型参数。

查询类的PowerShell命令的多数参数都是可选参数,这些可选的参数就是我们提到的Named参数。例如,使用Get-ChildItem 获取当前路径下的所有文件,这时命令执行可以不带任何参数。

可选参数意味着可以带参数,也可以不带相应的参数。通常来说,不带特定Named参数的查询结果通常都是结果集,而带有Named参数的多数结果都是针对特定对象。Named 参数类型的使用意味着进行参数值定义的时候,必须通过“-参数名称”来指定参数的值。图4.7所示为通过Get-Help获取参数中基于Named命名的参数类型。

图4.7 PowerShell Cmdlet的Named参数

3.参数类型之Position位置参数

Position是用来进行参数集位置定义的类型,Cmdlet 除了基于Named 的参数定义外,也支持基于位置的参数定义。在定义了位置的Cmdlet 中,参数的输入与位置有关。如何确定一个命令支持Position 位置参数呢?其实也非常简单,通过查询命令的具体参数就可以了解到Cmdlet中是否有支持以位置定义的参数。图4.8所示为查询命令参数后的结果,这里的Path就是支持以位置来定义的参数。

图4.8 PowerShell以位置定义的参数

在大多数场景中,我们不推荐使用位置参数进行参数值指定,如果有参数没有值或者没有按照位置设置参数,结果就会发生一些意外的错误。

接下来给大家分享使用Position 位置定义参数值的案例,通过Copy-Item方式进行数据复制,然后通过如下的命令来确定函数参数的位置定义。

参数的位置参数从0 开始进行定义,0位Path是第一个参数,也就是如图4.9所示的源文件路径。

图4.9 复制源文件路径

支持的位置第二个参数是Destination,这里可以看到如图4.10所示的第二个参数位置位于1,这个参数指定对象复制的目标路径。

图4.10 复制目标路径

在PowerShell命令中如果支持位置参数,意味着可以不使用Named参数的场景,而直接将参数的值写在相应的位置。如图4.11所示,我们既可以使用Named命名参数指定复制的对象位置,也可以使用位置参数来定义复制的源和目标。

图4.11 使用Named参数和位置参数复制

完成结果对比之后,你会发现两种操作的效果一模一样。

4.参数类型之Switch 参数

Switch 参数类型用来进行基于开关参数的属性定义,当跟上Switch之后,意味着开启属性定义,如果没有跟上,则意味着没有开启这个属性定义。如果一个参数类型是Switch 开关类型,在执行Cmdlet过程中可以通过“-参数”开启这个属性定义,而没有“-参数”意味着属性处于关闭状态。如果给你一个PowerShell Cmdlet,如何确定Cmdlet是否支持Switch参数类型呢?这个还是使用如图4.12所示的命令来获取参数是不是Switch类型,这里三个参数都是Switch类型数据。

图4.12 获取命令支持Switch类型参数

接下来分享一个Switch参数的案例,让大家更加深入地理解Switch参数开关的使用。图4.13为函数执行过程没有带Recurse参数的运行结果,这里仅仅获取了当前目录下的一级文件和目录。

图4.13 函数执行没有带Recurse

如果希望将当前目录下的所有目录和文件都列出来,就需要跟上Switch类型的Recurse参数来实现文件下一级目录的递归访问,图4.14命令使用Recurse完成目的文件递归访问。

图4.14 使用Recurse参数完成文件递归访问

这里的Recurse 就是Switch 类型的参数。使用了Switch参数之后,它的效果等同于布尔型的$True操作。使用布尔型我们需要定义结果为$True或$False,而使用Switch参数就简化了相关的步骤,直接利用Switch类型的开关就可以了,减少了因为输入错误数据导致命令无法正常执行的概率。

5.参数集功能

实际在使用PowerShell Cmdlet 过程中,会有不同的业务场景。例如,我们在创建一个新的文件对象过程中,可以基于路径创建,也可以基于文件名创建,类似的应用场景其实在PowerShell中会经常出现。Cmdlet 在不同的场景下需要不同类型的参数,这类参数在不同的应用场景下通常互斥,不能使用在同一场景中。

PowerShell为了解决这个问题推出了参数集的概念,Cmdlet 参数集功能基于不同的场景可以应用不同的参数集合,为了讲解清楚参数集的概念,接下来我们以两个Cmdlet为具体案例来分享参数集的使用。

以New-Item为例,如图4.15所示,我们的命令可以应用于两个不同场景:场景1是在当前目录下使用名称创建相应的文件,场景2是直接给出相应的文件目录,在这个场景下我们不需要跟上Name,也可以创建文件对象。

图4.15 New-Item的使用场景

另外一个使用参数集的命令是Get-Eventlog,Get-Eventlog命令基于不同的使用场景,也会有不同的参数集。

这里提到的第一个场景是列出当前系统中所有的日志功能列表,这里可以看到,图4.16列出了所有系统中日志的类别。

图4.16 系统日志类别

另外一类场景就是获取特定日志类别中的日志,例如,图4.17列出了所有应用程序日志内容。

图4.17 获取日志中的内容

接下来我们通过Get-Help Get-Eventlog来查看命令所支持的参数集功能,这里可以看到如图4.18所示的具体使用场景。

图4.18 Get-Eventlog 支持的参数集使用场景

至此所有的PowerShell Cmdlet的基本属性都已经讲解完毕了。这里分享的案例不多,大家需要举一反三,根据内容提示反复学习,争取掌握PowerShell中Cmdlet的基本属性功能。

4.2.3 Cmdlet 方法

严格意义上,Cmdlet本身就是方法,因此Cmdlet方法的这种说法严格意义上不是非常严谨,这里提到的Cmdlet方法指的是执行Cmdlet后的结果支持的方法。 vQUWVWogjIVqjXyrb1oMhYcSjzU1EqrW6KtKG9JJfS1CMf8Z9RUoCBdZSV2g3s5m

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