PowerShell基础教程(16)——对多个对象重复同一任务

PowerShell基础教程(16)——对多个对象重复同一任务 (ForEach-Object)             <o:p></o:p>

ForEach-Object cmdlet 可对当前管道对象使用脚本块和 $_ 描述符以允许您对该管道中每个对象运行命令。这可用于执行某些复杂的任务。

对于以下情况这将非常有用对数据进行操作以提高数据的实用性。例如,WMI 中的 Win32_LogicalDisk 类可用于返回每个本地磁盘的可用空间信息。数据是以字节形式返回的,因而可读性非常差:

PS> Get-WmiObject -Class Win32_LogicalDisk<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

DeviceID     :C:<o:p></o:p>

DriveType    : 3<o:p></o:p>

ProviderName :<o:p></o:p>

FreeSpace    :50665070592<o:p></o:p>

Size         :203912880128<o:p></o:p>

VolumeName   :Local Disk<o:p></o:p>

<o:p> </o:p>

将每个值两次与 1024 相除从而将 FreeSpace 值转换为兆字节。首次相除之后,数据是以千字节形式表示的,第二次相除之后,数据就以兆字节形式表示了。通过键入以下命令可在 ForEach-Object 脚本块中实现此转换:

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.FreeSpace)/1024.0/1024.0}<o:p></o:p>

48318.01171875<o:p></o:p>

<o:p> </o:p>

但是现在输出的数据没有任何关联的标签。由于此类 WMI 属性是只读的,因此无法直接转换 FreeSpace。如果键入以下命令:

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0}<o:p></o:p>

<o:p> </o:p>则将收到错误消息:

FreeSpace为只读属性。<o:p></o:p>

所在行:1 字符:70 <o:p></o:p>

+ Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.F <<<< r<o:p></o:p>

eeSpace = ($_.FreeSpace)/1024.0/1024.0}<o:p></o:p>

<o:p> </o:p>您可以使用高级技巧重新组织数据但更简便的方法是使用 Select-Object 创建新对象。

 

你可能感兴趣的:(C++,c,C#,脚本,powershell)