可以使用 Select-Object cmdlet 创建新的自定义 Windows PowerShell 对象,这些对象包含的属性是从用于创建它们的对象中选择的。键入以下命令可创建新对象,该对象仅包含 Win32_LogicalDisk WMI 类的 Name 和 FreeSpace 属性:
PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace Name FreeSpace ---- --------- C: 50664845312
在发出该命令后,您将无法查看数据的类型,但如果在执行 Select-Object 命令后通过管道将结果传递给 Get-Member,则可发现已经存在一个新的对象类型 PSCustomObject:
PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetType Method System.Type GetType() ToString Method System.String ToString() FreeSpace NoteProperty FreeSpace=... Name NoteProperty System.String Name=C:
Select-Object 具有很多用途。其中之一就是复制可随后进行修改的数据。现在,我们可以解决上一节中遇到的问题了。我们可以更新最新创建的对象中的 FreeSpace 的值,而且输出将包括描述性标签:
Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0; $_} Name FreeSpace ---- --------- C: 48317.7265625