DDR爱好者之家 Design By 杰米

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

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

PowerShell中的对象

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

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

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

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

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

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

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

例如:

get-service | get-member 

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

探索PowerShell (四) PowerShell的对象、格式与参数

当然,我们可以使用"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

可以发现其中一条:

探索PowerShell (四) PowerShell的对象、格式与参数

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

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

PowerShell的格式

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

Get-Command Format-* <enter>

其结果为:

探索PowerShell (四) PowerShell的对象、格式与参数

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

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"文件):

探索PowerShell (四) PowerShell的对象、格式与参数

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

Invoke-Item Processes.csv <Enter>

探索PowerShell (四) PowerShell的对象、格式与参数

使用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> 

探索PowerShell (四) PowerShell的对象、格式与参数

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

那么如下这条cmdlet呢:

Set-ExecutionPolicy Unrestricted -confirm <enter> 

探索PowerShell (四) PowerShell的对象、格式与参数

是的,它将返回一条验证操作,以获取用户的进一步许可。只是"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的对象、格式与参数

聪明的你,明白了么?


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

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

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。