使用脚本验证输入的参数
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类型提供了一些快捷方式,比如WMI,ADSI或者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