开发者社区> 技术小胖子> 正文

【探索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,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SHELL中函数的写法、调用、参数、返回值代码范例
SHELL中函数的写法、调用、参数、返回值代码范例
30 0
《懒人Shell脚本》之七——格式化处理数据存入数据库实现
0、引言 实际应用开发中遇到:将非格式化的文件数据存储到数据库中。对于传统的格式化的数据:ini/json/xml我们都有现成的类库去实现。而对于如下非格式化的数据呢?以下是我的思考与实现。
42 0
js之在函数参数中解构嵌套对象
在下面的代码中,engine是对象car中嵌套的一个对象。如果我们对engine的vin属性感兴趣,使用解构赋值可以很轻松地得到它
4942 0
kill命令"-1"这个参数到底是杀进程还是reload?(转)
kill-1:重新读取一次参数的配置文件 (类似 reload) 这句话给我的感觉是把进程杀掉后重启进程,即 reload。而我查了下 man kill,-1 对应的 signal 是 SIGHUP,用个find / -perm +7000 > /dev/null 2>&1 &命令试验了下确实是杀进程,鸟哥说反了? SIGHUP - hangup or exit a foreground running process from a terminal 原因:对daemon是重新读取配置,对普通进程就是杀掉。
736 0
《JavaScript设计模式》——第2章 写的都是看到的——面向对象编程 2.1两种编程风格——面向过程与面向对象
面向对象编程就是将你的需求抽象成一个对象,然后针对这个对象分析其特征(属性)与动作(方法)。这个对象我们称之为类。面向对象编程思想其中有一个特点就是封装,就是说把你需要的功能放在一个对象里。比如你大学毕业你来公司携带的行李物品没有一件一件拿过来,而是要将他们放在一个旅行箱里,这样不论携带还是管理都会更方便一些。
1334 0
【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
47 0
《懒人Shell脚本》之三——微博分类信息获取与格式化
1、需求: 获取微博网站ctg1_4188#”>http://d.weibo.com/102803_ctg1_4188-_ctg1_4188# 社会类媒体的名称信息。 构造成json格式,用于echart格式化显示。
43 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载