【探索PowerShell 】【四】PowerShell的对象、格式与参数

简介:

今天贴博文晚了,感谢各位能继续关注!

本节将要给大家介绍一下PowerShell下的对象,基本格式以及参数。依然属于PowerShell的基础。

PowerShell中的对象

在本教程开篇我们说过,PowerShell是基于面向对象化的,不像传统的shell那样基于文本。这其中最主要的原因就是因为Win平台在管理操作上主要以面向对象为主,因此为了符合系统特点和我们的操作习惯,PowerShell也继承了这一特色。因此,不像传统的shell,在PowerShell中,我们可以随意地与对象进行互动,

先来认识一下,什么是对象——object

不知各位有没有从事开发的经验。实际上,面向对象这一概念的提出就是为了更好用程序语言解决现实问题而提出的。

废话不多说,直接切入正题。在PowerShell中,“对象”是指我们收集信息或者执行操作的行为。包括属性(信息,我们可以收集)和方法(我们可以执行)。

有一个生动的例子——“灯泡”。对象是显而易见的,它是一个灯泡。一个灯泡的属性可能包括了其颜色,功率和类型(荧光灯,白炽灯或卤素灯)。对于它的操作,或者称之为方法,则是我们可以执行的行为,如打开和关闭。这很容易理解!

让我们看看在PowerShell中一个对象的属性以及其方法。

首先,你可能会经常使用它"Get-Member”,这个cmdlet是用来检查一个对象具有哪些属性和方法的。

例如:

get-service | get-member 

使用这条命令就可以查看"get-service”t的属性和方法。在这个例子中,我们使用管道符来进行命令的传递。运行结果如下:

当然,我们可以使用"get-member"的参数来查看"get-service"的所有的属性类对象,或者方法类对象。

例如:

查看"get-service"的所有属性类对象

Get-Service | Get-Member -MemberType Property<enter> 

查看get-service"的所有方法类对象

Get-Service | Get-Member -MemberType Method<enter> 

为什么我们如此的强调对象?原因就是在PowerShell中,所有的一切都是对象。

例如:

我们要找出指定日期写入d:\的文件有哪些,使用如下命令:

Get-ChildItem -Path d:\ -Recurse | Where-Object {$_.LastWriteTime -gt "01/01/2010"}<enter>

现在来解释一下:

首先,"get-childitem"是用来枚举我们的文件系统的,使用"-path"参数,将路径指向"d:\",使用"-recurse"参数,意味着将显示所有的文件,甚至是子目录下的。接下来,我们将结果使用管道符传递给循环声明"where-object"中,用来筛选出符合条件的结果。

那么,"lastwritetime"又是什么?

我们使用如下命令看看"get-childitem"都有哪些属性可供我们筛选:

get-chileitem | get-member

可以发现其中一条:

对,就是这个。我们需要筛选出的对象属性就是最后写日期。在后面的定义中可以看到"LastWriteTime"会将一个"Syetem.DateTime"数据类型作为反馈。因此,在整个语句的后半部,我们使用了"-gt"进行进一步的筛选,"-gt"是"greater than"的缩写,意味“大于”。在以后的教程中我将会介绍更多类似这样的操作。前面说到,"LastWriteTime"是一个"Syetem.DateTime"类型的数据,因此,我们最终使用类似"01/01/2010"这样的表达。这一点需要大家多加注意,在以后的运用中需要注意数据类型。

后续的教程中,我还会尽可能全面的介绍WMI、COM以及 .NET,不过,我们现在知道并掌握上面的就足够了。

PowerShell的格式

在这一小节,我将介绍PowerShell中的格式化输出。当我们使用一个cmdlet时,参数"format-"允许我们选择一种习惯的输出模式。使用以下命令试一试:

Get-Command Format-* <enter>

其结果为:

好了,这一个知识点很简单。请各位童鞋使用如下命令试一试,结果怎么样看看就知道了。

get-childitem c:\windows | format-table <enter>

get-childitem c:\windows | format-table -autosize <enter>

get-childitem c:\windows | format-custom <enter>

get-childitem c:\windows | format-list <enter>

get-childitem c:\windows | format-list -Property FullName <enter>

get-childitem c:\windows | format-wide <enter>

当然,复杂些的还有以下这些,我不想解释过多,大家只要肯亲自动手试一试,一眼就能看明白。

Get-ChildItem C:\Windows -Recurse | Format-List -Property FullName,CreationTime,LastWriteTime<enter>

Get-ChildItem C: | Format-Wide -Column 3<enter>

另外,在其他cmdlet中,存在其他格式的输出。例如,在"get-process"中就有"group-object","Get-EventLog"中我们可能用到"Sort-Object",甚至,我们可以输出为特定格式的文件,例如使用"Convertto-HTML"输出为html,使用"Export-CSV"输出为表格文件(可以使用Excel打开)。

统统举例如下(记住管道符):

Get-Process | Group-Object Company<enter>

Get-EventLog System | Group-Object eventid<enter>

Get-EventLog System | Group-Object eventid | Sort-Object Count -descending<enter>

Get-Process | ConvertTo-html<enter>

Get-Process | ConvertTo-html | out-file “Processes.html”<enter>

Get-Process | Export-CSV Processes.csv<enter>

至于打开文件,使用如下命令即可:

Invoke-Item Processes.html<enter> 

Invoke-Item Processes.csv<enter>

看看截图吧(输出为".CSV"文件):

使用"Invoke-Item"命令打开:

Invoke-Item Processes.csv <Enter>

使用PowerShell的格式化输出是不是很简单呢?个人认为比VBScript要更加容易上手一些。管理系统更加方便!

PowerShell的常见参数

我们前面介绍过,为了简化我们的记忆,PowerShell对cmdlet使用了全新的"动词-名词"的命名方式,更加方便的是,几乎所有的cmdlet都拥有统一的标准化参数,当然,我说了,几乎所有的——并非全部。下面这个列表,列举出了“公共参数”(这些参数的名称是我们无法自定义使用的):


-confirm 在执行cmdlet前提示用户。

-debug  提供相关调试信息。

-ErrorAction 提示cmdlet在执行某项操作时可能出现的错误。如:继续,停止等。 

-ErrorVariable  使用一个特定的变量($error)来保存错误信息。

-OutVariable 用于保存输出信息的变量。

-OutBuffer 确定在进行下一次管道传递前需要缓存的对象数量。

-Verbose 为我们提供更多细节。

-whatif  并不会真正执行cmdlet,只是告诉你会发生什么。


此外,PowerShell中还保留了这些参数的下列别名:vb、db、ea、ev、ov 和 ob。

参数太多不好记?好办,记得使用"Tab"键,如:

get-service -<Tab> 

或者使用帮助命令"get-help":

get-help get-service -full <Enter>

好了,我们做一些简单的演示吧:

Set-ExecutionPolicy Unrestricted -whatif <enter> 

是不是很方便?在执行cmdlet之前,"-whatif"就会告诉你接下来会发生什么。

那么如下这条cmdlet呢:

Set-ExecutionPolicy Unrestricted -confirm <enter> 

是的,它将返回一条验证操作,以获取用户的进一步许可。只是"Y"、"A"、"N"、"L"与"?"我们都能轻易理解,那么"S"呢?

请注意观察以下执行结果:

Set-ExecutionPolicy Unrestricted -confirm<enter>  

Are you sure you want…  

S<enter> (places the prompt in suspend mode as denoted by “>>”).  

>>Get-ExecutionPolicy<enter>  

Resricted (or whatever the policy is set to).  

>>exit<enter> (Typing “exit” leaves suspend mode and returns to the original command)  

Are you sure you want…  

Y<enter> (Confirms “Yes” and sets the ExecutionPolicy to “Unrestricted”). 

执行实例截图:

聪明的你,明白了么?


好了,本节内容就到这里。本节中对PowerShell中对象、格式与参数的介绍,仅仅是其冰山一角,在后续的教程中,我们将继续利用今天学习的来进行工作。当然,在本节中还有很多其他我们尚未涉及到的内容、参数等,希望各位童鞋能积极利用PowerShell中所提供的工具进行探索,如"get-help"、"get-member"命令等。

Ps:最后,非常感谢各位能热情而持续的关注本教程,如果您有任何意见或问题,请进行留言,我将做详细解答!谢谢。





     本文转自melvillo 51CTO博客,原文链接:http://blog.51cto.com/marui/290535,如需转载请自行联系原作者



相关文章
|
6月前
|
程序员
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
【2月更文挑战第6篇】Verbose 参数主要用来显示函数执行过程中通过Write-Verbose写入的相关信息,如果命令执行当中有写入则会有反馈信息输出,反之则没有任何信息输出。输入如下命令
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
|
6月前
|
存储
PowerShell系列(十二):PowerShell Cmdlet高级参数介绍(二)
【2月更文挑战第7篇】$Error变量,对于PowerShell执行出现的错误会被写入到这个变量里面,加上时间的累积,这个变量的数据量就会非常大,我们平常在排查问题的时候需要对错误信息进行Debu调试,这个时候ErrorVariable 就可以解决这个问题,它的主要作用是把执行出现错误的信息输出到我们定义的变量里面去。
|
6月前
|
文件存储
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
【2月更文挑战第5篇】强制类型参数使用比较频繁,基本上涉及新建、更新、配置等命令都需要针对特定的对应进行操作,所有需要强制输入一个参数来确认操作的对象是谁。
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
|
存储 JSON 运维
PowerShell / 运维PowerShell 对象的序列化和反序列化
本文介绍Powershell中如何实现对象的序列化和反序列化。
122 0
|
3月前
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
PowerShell系列(十三):PowerShell Cmdlet高级参数介绍(三)
【2月更文挑战第8篇】WarningAction参数和执行命令过程中的警告有关系,该参数就是在PowerShell命令执行过程中出现警告之后进行的操作,默认环境中存在WarningPreference参数定义命令执行过程中出现警告的操作,当然也可以出现警告的时候执行特殊的操作
|
6月前
|
存储 JSON 运维
PowerShell 对象的序列化和反序列化
PowerShell 对象的序列化和反序列化
112 0
|
6月前
|
关系型数据库 MySQL Java
PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理
PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理
195 0