我的脚本正在运行,但是当我在管道中使用foreach-object作为单个项目时,我觉得我做错了。这是代码:
$computers = ('Computer1','Computer2')
ForEach($computer in $computers){
Get-ADComputer $computer -Properties description | ForEach{$_.description -split ','} | Select -first 1 |
Get-ADUser | ForEach{$computer + ": " + $_.name}
}
该脚本正在AD中检索计算机,并查看所有者的说明。我只需要描述的第一部分,所以我将逗号分开。
我的问题:像这样使用ForEach是否正确:
ForEach{$_.description -split ','}
当它看起来像是
$_.description -split ','
应该足够了,因为它无论如何只是管道中的一个项目。 (但这显然给出了“表达式只允许作为管道的第一个元素”
对不起,这很乱,我希望有人理解我的目标。
编辑:
阅读答案后,这是我的最终代码:
$computers = ('Computer1','Computer2')
ForEach($computer in $computers){
Get-ADComputer $computer -Properties description | ForEach{$s = $_; ($s.description -split ',')[0]} | Get-ADUser | ForEach{$computer + ": " + $_.name}
}
答案 0 :(得分:3)
你是不是需要以你的方式对其进行编码是正确的,但有两点值得:
您可以将第一位更改为此类
((Get-ADComputer $computer -Properties description).description -split ',')[0] | Get-ADUser | ...
如果只返回一个计算机对象,那应该做同样的事情。可能会出现这种情况,但并不总是这种逻辑。我认为你拥有它的方式更简单。
我可能会这样做
$computers = ('Computer1','Computer2')
ForEach($computer in $computers){
Get-ADComputer $computer -Properties description |
ForEach{($_.description -split ',')[0]} |
Get-ADUser | ForEach{$computer + ": " + $_.name}
}
这里我通过在foreach循环中获取所需元素来删除select。我还更改了缩进以显示长管道语句的关系。我最初做了一个错误的评论,因为你缩进让我看到Get-ADUser | ForEach{$computer + ": " + $_.name}
作为一个独特的陈述。