本文目录
每一个Powershell命令都会返回一个对象,但是返回的对象不易操作,因为控制台解释器会自动将对象转换成可视的文本,这样就会丢失绝大多数对象的信息。
在变量中存储结果
不要将结果在控制台输出可以防止对象转换成文本。控制台是一个不安全的地方,任何对象输出后都会自动转换成文本,最安全的方式是将对象保存在变量中。如果想将对象输出为文本,可以在控制台输入变量名。
PS C:Powershell> $FileList=dir PS C:Powershell> $FileList 目录: C:Powershell Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2011/12/19 17:43 8956 a.ccs -a--- 2011/12/19 18:02 46411 a.csv
事实上述存储在$FileList变量中的并不是真实的对象,而是一个对象数组,数组可以通过索引访问得到真实的对象。
PS C:Powershell> $obj=(dir)[0] PS C:Powershell> $obj 目录: C:Powershell Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2011/12/19 17:43 8956 a.ccs
使用对象的属性
可以使用Get-Member得到一个对象所有的属性:
PS C:Powershell> $obj=(dir)[0] PS C:Powershell> $obj | Get-Member -MemberType Property TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- Attributes Property System.IO.FileAttributes Attributes {get;set;} CreationTime Property System.DateTime CreationTime {get;set;} CreationTimeUtc Property System.DateTime CreationTimeUtc {get;set;} Directory Property System.IO.DirectoryInfo Directory {get;} DirectoryName Property System.String DirectoryName {get;} Exists Property System.Boolean Exists {get;} Extension Property System.String Extension {get;} FullName Property System.String FullName {get;} IsReadOnly Property System.Boolean IsReadOnly {get;set;} LastAccessTime Property System.DateTime LastAccessTime {get;set;} LastAccessTimeUtc Property System.DateTime LastAccessTimeUtc {get;set;} LastWriteTime Property System.DateTime LastWriteTime {get;set;} LastWriteTimeUtc Property System.DateTime LastWriteTimeUtc {get;set;} Length Property System.Int64 Length {get;} Name Property System.String Name {get;}
如果属性的定义列中包含{get;set}表明该属性可以被更新:
PS C:Powershell> $obj.LastAccessTime 2011年12月19日 17:43:37 PS C:Powershell> $obj.LastAccessTime=Get-Date PS C:Powershell> $obj.LastAccessTime 2012年1月11日 14:21:01
Powershell特殊属性
Powershell中 可以给一个对象增加属性,增加的属性仍然可以通过Get-Member的标签辨别,因为对象的正常属性标签名为:Property,新增加的属性标签多了一个前缀,如ScriptProperty和NoteProperty。
一个NoteProperty包含了静态的数据。一个ScriptProperty中包含了一段脚本,通过脚本计算出属性的值。
下面的例子新建一个对象$obj,给$obj增加两个属性一个为NoteProperty,一个为ScriptProperty,输出$obj ,CurrentTime属性会自动更新,AddTime则不会。
PS C:Powershell> $obj=New-Object PSobject PS C:Powershell> $obj | Add-Member -MemberType NoteProperty -Name AddTime -Value (get-date) PS C:Powershell> $obj | Add-Member -MemberType ScriptProperty -Name CurrentTime -Value {get-date} PS C:Powershell> $obj AddTime CurrentTime ------- ----------- 2012/1/11 14:35:38 2012/1/11 14:36:35 PS C:Powershell> $obj AddTime CurrentTime ------- ----------- 2012/1/11 14:35:38 2012/1/11 14:36:44
MemberType包括:
AliasProperty:另外一个属性的别名
CodeProperty:通过静态的.Net方法返回属性的内容
Property:真正的属性
NoteProperty:随后增加的属性
ScriptProperty:通过脚本执行返回一个属性的值
ParameterizedProperty:需要传递参数的属性
调用对象的方法
同样可以通过Get-Memeber获得一个对象支持的所有方法:
PS C:Powershell> $obj= (dir)[0] PS C:Powershell> $obj | Get-Member -me method TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- AppendText Method System.IO.StreamWriter AppendText() CopyTo Method System.IO.FileInfo CopyTo(string destFileName), System.IO.FileInfo CopyTo(strin... Create Method System.IO.FileStream Create() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType) CreateText Method System.IO.StreamWriter CreateText() Decrypt Method System.Void Decrypt() Delete Method System.Void Delete() Encrypt Method System.Void Encrypt() Equals Method bool Equals(System.Object obj) GetAccessControl Method System.Security.AccessControl.FileSecurity GetAccessControl(), System.Security.... GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetObjectData Method System.Void GetObjectData(System.Runtime.Serialization.SerializationInfo info, ... GetType Method type GetType() InitializeLifetimeService Method System.Object InitializeLifetimeService() MoveTo Method System.Void MoveTo(string destFileName) Open Method System.IO.FileStream Open(System.IO.FileMode mode), System.IO.FileStream Open(S... OpenRead Method System.IO.FileStream OpenRead() OpenText Method System.IO.StreamReader OpenText() OpenWrite Method System.IO.FileStream OpenWrite() Refresh Method System.Void Refresh() Replace Method System.IO.FileInfo Replace(string destinationFileName, string destinationBackup... SetAccessControl Method System.Void SetAccessControl(System.Security.AccessControl.FileSecurity fileSec... ToString Method string ToString()
调用一个对象的方法时,省略括号可以获取一个方法的详细定义信息:
PS C:Powershell> $obj.CreationTime 2011年12月19日 17:43:37 PS C:Powershell> $obj.MoveTo MemberType : Method OverloadDefinitions : {System.Void MoveTo(string destFileName)} TypeNameOfValue : System.Management.Automation.PSMethod Value : System.Void MoveTo(string destFileName) Name : MoveTo IsInstance : True
调用对象的Delete方法:
PS C:Powershell> Test-Path $obj True PS C:Powershell> $obj.Delete() PS C:Powershell> Test-Path $obj False
不同的方法类型
类似于属性,Powershell对象也可以增加方法,方法类型包括:
CodeMethod:映射到静态的.NET方法
Method:正常的方法
ScriptMethod:一个执行Powershell脚本的方法
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
我用的5.1版本,貌似没有delete方法;怎么删除对象
只要是System.IO.FileInfo对象,肯定有delete,你要看是什么类型:$obj.GetType().fullname
调用对象的Delete方法:
PS C:Powershell> $obj.Delete()
这里最好提醒一下萌新,不要在重要目录下运行,
虽然不是空文件夹好像会报错