如下说明是翻译
: help ForEach-Object
产生的帮助信息
.
译者
: Edengundam(
马涛
)
ForEach-Object
摘要
对输入集合中每个对象执行操作
.
语法
ForEach-Object [-process] <ScriptBlock[]> [-inputObject <psobject>] [-begin <scriptblock>] [-end <scriptblock>] [<CommonParameters>]
详细描述
对输入集合中每个对象执行操作
.
输入对象可以从管道传递给
cmdlet
或通过
InputObject
参数指定
.
执行的操作通过提供共给
cmdlet
的
Process
参数的代码块描述
.
代码块可以包含任意
Windows PowerShell
脚本
.
在脚本块中
,
当前输入对象使用
$_
变量表示
.
除了能够为输入的每个对象指定一个进行操作的脚本块外
,
你还可以提供两个额外的脚本块
.
一个作为
Begin
参数的参数值
,
在处理任何输入对象之前运行
.
另一个作为
End
参数的参数值
,
在处理完所有输入对象后执行
.
脚本块求值的结果
(
包括由
Begin
和
End
产生的
)
沿着管道继续传递
.
参数
-process <ScriptBlock[]>
指定为每个输入对象进行处理的脚本块
.
强制参数
?
|
true
|
参数位置
?
|
1
|
默认值
|
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-inputObject <psobject>
接受一个对象
,
并将其作为
Process
参数指定的脚本块进行操作的对象
.
输入一个包含对象的变量
,
或者一个能够产生对象的命令或表达式
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
|
允许从管道绑定输入
?
|
true (
根据值
)
|
允许通配符扩展
?
|
false
|
-begin <scriptblock>
指定用于在处理任何输入对象之前运行的脚本块
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-end <scriptblock>
指定用于在处理完所有输入对象之后执行的脚本块
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
<
公共参数
>
此命令支持公共参数
: -Verbose, -Debug, -ErrorAction, -ErrorVariable
和
-OutVariable.
更多信息
,
输入
, "get-help about_commonparameters".
输入类型
Object
注意
更多信息
,
输入
"Get-Help ForEach-Object -detailed".
需要技术信息
,
输入
"Get-Help ForEach-Object -full".
如果需要为该命令提供多个参数
,
请使用逗号进行分隔
.
例如
, "<parameter-name> <value1>, <value2>".
例
1
C:/PS>30000,56798,12432 | foreach-object -process {$_/1024}
此命令接受一个由整数构成的数组
,
并将其中每个元素除以
1024,
并将结果输出
.
例
2
C:/PS>get-childitem C:/ | foreach-object -process { $_.length / 1024 }
此命令取得
C
驱动下的文件和目录
,
并显示它们的占用空间大小
.
数值
0
表示目录没有文件大小这一参数
(
译者注
:
实际上长度为
0
的文件
,
也会导致一样的结果
,
因此不能将文件大小为
0
作为判断文件和目录的依据
).
例
3
C:/PS>$events = get-eventlog -logname system -newest 1000
$events |
foreach-object -begin {get-date}
-process {out-file -filepath events.txt -append -inputobject $_.message}
-end {get-date}
此命令取得最近
1000
项系统日志信息
,
并将它们存储到变量
$events
中
.
接下来将这些日志通过管道传递给
ForEach-Object cmdlet.
参数
Begin
显示当前时间和日期
.
下一个参数是
Process,
利用
Out-File cmdlet
创建一个名叫
events.txt
的文本文件
,
并将每个时间的
message
属性信息存储到该文件中
.
最后是
End
参数
,
它被用来显示当所有处理结束时的日期和时间
.
例
4
C:/PS>get-itemproperty -path hkcu:/Network/* |
foreach-object {set-itemproperty -path $_.pspath -name RemotePath
-value $_.RemotePath.ToUpper();}
此命令通过使用
Set-ItemProperty
更新一组注册表项
.
注册表项指定的是计算机上映射网络驱动器的
UNC
路径
.
此命令改变
UNC
路径中的字母为大写字母
.
实际情境中
,
你可能需要改变服务器名称或路径中某个部分
.
由于
Set-ItemProperty cmdlet
一次更新一个属性
, ForEach-Object cmdlet
将会针对每个需要更改的属性
(
这个例子中就是
:
注册表项
)
调用一次
Set-ItemProperty.
注册表项的名称是
RemotePath,
位于
HKCU/Network/<mapped drive letter>
位置
.
通过使用
Get-ItemProperty cmdlet
取得表示这些注册表项的对象
,
并将它们通过管道作为输入传递给
ForEach-Object.
在
ForEach-Object
中调用
Set-ItemProperty
时
,
变量
$_
持有一个正在处理的注册表项对象的引用
.
属性
PSPath
的值是保存当前项的注册表项
. RemotePath
属性的类型为
System.String,
因此它包含了
ToUpper
方法
,
用来将项的内容转换为大写形式
.
相关链接
Where-Object
Compare-Object
Group-Object
Select-Object
Sort-Object