学习windows powershell(对象)

来源:互联网 发布:网页提取软件 编辑:程序博客网 时间:2024/05/17 07:08

在命令行方式下使用.net对象,而且还要象编程一样去用,真的感觉很累,非常的累,真的想把这块忽略过去,不过既然已经primer教程了,也把学习的结果写下来了.

Name           Category Synopsis
----           -------- --------
ForEach-Object Cmdlet   针对每一组输入对象执行操作。
Where-Object   Cmdlet   创建控制哪些对象沿着命令管道传递的筛选器。
Compare-Object Cmdlet   比较两组对象。
Measure-Object Cmdlet   度量对象的特征及其属性。
Tee-Object     Cmdlet   通过管道将对象输入传递给文件或变量,然后通过管道传递输入。
New-Object     Cmdlet   创建 .Net 或 COM 对象的实例。
Select-Object  Cmdlet   选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象,也可以从对象数组的开头或
                        末尾选择指定个数的对象。
Group-Object   Cmdlet   指定的属性包含相同值的组对象。
Sort-Object    Cmdlet   按属性值对对象进行排序。

能用的命令不少,在学习的过程中并没有全部涉及,涉及的对象也只有一小部份使用方法,不过对于primer来说,要想掌握感觉也还是挺困难的,还好PS cmdlets是大小写不敏感的,要不学习起来真的比较困难.

一、静态类和方法/属性

静态类的引用那就很方便了,如:system.environment

PS C:/> [system.environment]::commandline
powershell
PS C:/> [system.environment]::username
Administrator
PS C:/> [system.environment].username
PS C:/> [system.environment]::processorcount
2

二、New-Object(创建新的对象)

PS Env:/> get-command new-object -syntax
New-Object [-TypeName] <String> [[-ArgumentList] <Object[]>] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-Er
rorVariable <String>] [-OutVariable <String>] [-OutBuffer <Int32>] (创建.net对象)
New-Object [-ComObject] <String> [-Strict] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <Strin
g>] [-OutVariable <String>] [-OutBuffer <Int32>] (创建com对象 )

创建.net具体的类的对象时候一定要用-typename参数,否则创建的对象就是system.object类,使用argumentlist参数赋值,构造一个对象,这个只要能明白对象的构造函数就能明白-argumentlist作用了。简单的示例如下:

PS C:/> $applog=new-object -typename system.diagnostics.eventlog -argumentlist a
pplication
PS C:/> $applog

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
  20,480      0 OverwriteAsNeeded         134 应用程序


PS C:/> $applog.entries

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
 5811 八月 31 16:59 Info Microsoft-Windows...        2 无法找到源“Microsoft...
 5812 八月 31 16:59 Info Desktop Window Ma...     9009 桌面窗口管理器已退出...
 5813 八月 31 16:59 Warn profsvc                  1530 Windows 检测到注册表...
 5814 八月 31 16:59 Info MSSQLSERVER             17147 由于系统关闭,SQL Ser...

......

上述例子创建了一个application eventlog对象,并将对象赋值给$applog变量,至于这个eventlog有哪些方法及属性,那可以通过以下命令获得:

PS C:/> $applog|get-member -membertype property


   TypeName: System.Diagnostics.EventLog

Name                 MemberType Definition
----                 ---------- ----------
Container            Property   System.ComponentModel.IContainer Container {...
EnableRaisingEvents  Property   System.Boolean EnableRaisingEvents {get;set;}
Entries              Property   System.Diagnostics.EventLogEntryCollection E...
Log                  Property   System.String Log {get;set;}

......

new-object还可以创建COM对象,如创建一个WSH对象:

PS C:/> new-object -ComObject WScript.shell

SpecialFolders                          CurrentDirectory
--------------                          ----------------
{C:/Users/Public/Desktop, C:/Program... C:/Users/Administrator

对于wsh对象,我几乎是一无所知,因此,也无法继续使用该对象来深入学习。

 

三、where-object:过滤

这个东西有点好用,继续使用上述的$applog

PS C:/> $applog.entries|where-object -filterscript {$_.source -eq "mssqlserver"}


Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
 5814 八月 31 16:59 Info MSSQLSERVER             17147 由于系统关闭,SQL Ser...
 5826 九月 01 07:30 Info MSSQLSERVER             17069 Microsoft SQL Server ...
 5827 九月 01 07:30 Info MSSQLSERVER             17101 (c) 2005 Microsoft Co...
 5828 九月 01 07:30 Info MSSQLSERVER             17103 保留所有权利。
 5829 九月 01 07:30 Info MSSQLSERVER             17104 服务器进程 ID 为 1884。
 5830 九月 01 07:30 Info MSSQLSERVER             15268 身份验证模式为 MIXED。
 5831 九月 01 07:30 Info MSSQLSERVER             17111 正在文件 'D:/Program ...
 5832 九月 01 07:30 Info MSSQLSERVER             17176 从有关的报告了解到,...

......

比较符如下:

-eq/-ne/-lt/-le/-gt/-ge/-like/-notlike/-contains/-notcontains ,对应用

相等/不等/小于/小于等于/大于/大于等于/类似/非类似/包含/不包含   包含和不包含是集合操作,如1,2,3 contains 2=true

比较的结果返回值为布尔型,任何非0字符都是true,整数0能够表达false,或者是对象$false.

和一般程序语言一样,同样有着逻辑计算符 -and/-or/-not,不管是哪种情况,操作数最好用括号括起来,我到现在也不知道其计算优先级顺序。

PS C:/> $applog.entries|where-object -filterscript {($_.source -eq "mssqlserver"
) -and ($_.message -like "M*")}

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
 5826 九月 01 07:30 Info MSSQLSERVER             17069 Microsoft SQL Server ...

应该再次提醒的就是:

1、操作符是以“-”开头的,这个非常容易被忽略,记着eq容易,常常忘记前面的“-”

2、$_表示当前对象,因此可以象对象一样引用其属性,或者是使用其方法。

3、过滤的作用就是将送入下一道处理的对象筛选一次,适合条件的进入|后的命令处理,我们上面的例子是默认的|out-host

4、对于get-wmiobject生成的对象同样适用于where-object,和get-wmiobject本身所带的-filter参数并冲突,结合使用效果更好,但是并不能替代-filter参数

四、sort-object(对象显示顺序排序)

1、可以多个管道符组合使用,后面的sort-object先进行排序

2、同一sort-object下,可以对多个属性同时进行排序,列在前的属性先进行排序,同一sort-object下,不能对多列属性分别行升序/降序排序,所有属性只能使用一种排序方式

示例如下:

PS C:/> get-childitem|sort-object -property mode,lastwritetime


    目录: Microsoft.PowerShell.Core/FileSystem::C:/


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2006/9/19      5:43         24 autoexec.bat
-a---         2006/9/19      5:43         10 config.sys
-a---         2008/7/16     14:18       1024 .rnd
-a---         2008/8/12     14:14          4 ev516.txt
-a---         2008/8/30     14:56          0 out.txt
-ar-s         2008/7/16     12:14       8192 BOOTSECT.BAK
d----         2008/1/19     17:40            PerfLogs
d----         2008/7/19     12:07            dell
d----         2008/7/19     12:07            Intel
d----         2008/8/25     12:42            Windows
d-r--         2008/7/19      7:34            Users
d-r--          2008/9/1      7:45            Program Files


PS C:/> get-childitem|sort-object -property mode -descending|sort-object -proper
ty lastwritetime


    目录: Microsoft.PowerShell.Core/FileSystem::C:/


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2006/9/19      5:43         24 autoexec.bat
-a---         2006/9/19      5:43         10 config.sys
d----         2008/1/19     17:40            PerfLogs
-ar-s         2008/7/16     12:14       8192 BOOTSECT.BAK
-a---         2008/7/16     14:18       1024 .rnd
d-r--         2008/7/19      7:34            Users
d----         2008/7/19     12:07            dell
d----         2008/7/19     12:07            Intel
-a---         2008/8/12     14:14          4 ev516.txt
d----         2008/8/25     12:42            Windows
-a---         2008/8/30     14:56          0 out.txt
d-r--          2008/9/1      7:45            Program Files

五、foreach-object(在一组队象内枚举)

最简单的例子如下:

PS C:/> 1,2,3,4|foreach-object -process {$_+10}
11
12
13
14

为数据的每个数字加上10,1,2,3,4是可以创建一个数组的,书上没有说明怎么个用法。

六、measure-object,对某些属性进行求和等处理,例子在下面的一个命令讲

七、get-wmiobject

wmi=windows management instrumentation(windows管理插件),使用get-wmiobject -list,随便看一下就知道,一个系统中这种插件多如得很,我的系统中100多,列出以后只感觉一脸茫然,这么多对象,怎么用?还好,我是个乐观的人,想想,用不到就算了,用到了总之能够学会的。我就举个例子了,同时也是个measure-object的例子:

PS C:/> get-wmiobject -class win32_logicaldisk|where-object -filterscript {$_.dr
ivetype -eq 3}|measure-object -property freespace,size -sum|format-table -proper
ty property,sum

Property                                                                    Sum
--------                                                                    ---
freespace                                                           17811427328
size                                                                79990747136

首先是获得逻辑驱动器,其次是过滤,只有硬盘进入计算,最终以表格列出结果。

八、select-object,从一个对象中选取部份属性并生成另一对象,应该说明的是,即使原对象是只读或者属性只读,select后的对象是可读写的

写到这儿也就写完了,使用方法容易掌握,但要实际应用,比较困难,因为那么多类,累不死人才怪的事情。

 

原创粉丝点击