PowerTip of the Day from powershell.com上周汇总(七)

 

使用脚本验证输入的参数

Using Scripts to Validate Input

http://powershell.com/cs/blogs/tips/archive/2010/08/30/using-scripts-to-validate-input.aspx

通过ValidateScript实现。

function Copy-OldFiles {
param(
$Days=30,
[Parameter(ValueFromPipeline=$true)]
[System.IO.FileInfo]
[ValidateScript({ (New-TimeSpan $_.LastWriteTime).Days -gt $Days })]
$FileObject
)

process {
"Archiving file {0} (Age {1})..." -f $FileObject.FullName, (New-TimeSpan $_.LastWriteTime).Days
}
}

个人感觉不如在方法体里实现更容易理解和实现。

 

 

查看对象的继承关系

View Object Inheritance

http://powershell.com/cs/blogs/tips/archive/2010/08/31/view-object-inheritance.aspx

一个叫PSTypeNames的隐藏属性可以显示一个对象的继承连

(Get-WMIObject Win32_BIOS).PSTypeNames

GetType()对比,这个属性对所有对象有效,包括COM对象,最常用的方法就是获取继承链的第一个元素:

(Get-WMIObject Win32_BIOS).PSTypeNames[0]

 

 

版本对照

Comparing Versions

http://powershell.com/cs/blogs/tips/archive/2010/09/01/comparing-versions.aspx

当比较两个字符串类型保存的版本号的时候,powershell会用字符数字算法(?)来比较,比如:

'a' -gt 'b'

False

所以会得到如下错误的结果:

'3.4.22.12' -gt '22.1.4.34'

True

这里需要将string类型转换成System.Version类型才可以正确比较。实际上,只需要把左边的类型转换就可以了,因为右面的也会随着进行转换:

[System.Version] '3.4.22.12' -gt '22.1.4.34'

False

 

 

类型加速器(?)

Type Accelerators

http://powershell.com/cs/blogs/tips/archive/2010/09/02/type-accelerators.aspx

powershell对一些.net类型提供了一些快捷方式,比如WMIADSI或者Int,可以使用FullName属性来获知一个类型名的全名:

[WMI].FullName

System.Management.ManagementObject

 

 

直接访问WMI实例

Accessing WMI Instances Directly

http://powershell.com/cs/blogs/tips/archive/2010/09/03/accessing-wmi-instances-directly.aspx

如果你知道一个WMI实例的路径,那么就可以直接把一个WMI路径字符串转换成一个WMI对象。

[wmi]'Win32_Service.Name="W32Time"'

[wmi]'Win32_Logicaldisk="C:"'

也可以指定一个完整的WMI路径,包含机器名:

[wmi]'\\SERVER5\root\cimv2:Win32_Service.Name="W32Time"'

 

 

 

 

以上来自powershell.com

2010年八月份16日到20日的PowerTip of the Day

 

posted @ 2010-09-06 17:47  哥本哈士奇(aspnetx)  阅读(385)  评论(0编辑  收藏  举报