gpt4 book ai didi

loops - Powershell自定义对象-不传递foreach变量

转载 作者:行者123 更新时间:2023-12-03 00:49:28 25 4
gpt4 key购买 nike

我正在尝试根据文本文件中的服务器名称创建自定义对象。
我使用的脚本将txt文件导入到变量中。然后在servers变量中运行一个foreach服务器以创建定制对象。我希望能够将对象的属性输出为不每次都包含标题信息的表。

请参见下面的脚本和输出:

 $SERVERS = gc c:\servers.txt


foreach ($srv in $SERVERS)
{
$Obj = New-Object PsObject -Property`
@{
Computername = $srv
SecurityGroup = (Get-QADComputer $srv).memberof
RebootDay = ((Get-QADComputer $srv).memberof).split(',').split(' ')[2]
Combined = ((Get-QADComputer $srv).memberof).split(',').split(' ').split('=')[1]
RebootTime = $obj.combined.substring(0,4)
}

echo $obj | ft Computername,RebootDay -autosize

}

这是当前的输出:

计算机名重启日

SERVER007周日

计算机名重启日

SERVER009周日

计算机名重启日

SERVER003周日

我希望它看起来更像:

计算机名重启日

SERVER007周日
SERVER001周日
SERVER009周日

最佳答案

TessellatingHeckler确实在正确的轨道上。他的代码存在的问题是,您不能将ForEach($x in $y){}循环传递给任何对象(不要与通常会缩短为ForEach-ObjectForEach循环(例如$Servers | ForEach{<code here>}混淆)相混淆)您不想将对象通过管道传递给Format-Table时间,您想通过管道将对象集合传递给它,这样看起来就不错了。所以这是修改后的代码:

$SERVERS = gc c:\servers.txt

$Results = foreach ($srv in $SERVERS)
{
New-Object PsObject -Property @{
Computername = $srv
SecurityGroup = (Get-QADComputer $srv).memberof
RebootDay = ((Get-QADComputer $srv).memberof).split(',').split(' ')[2]
Combined = ((Get-QADComputer $srv).memberof).split(',').split(' ').split('=')[1]
RebootTime = $obj.combined.substring(0,4)
}
}
$Results | FT ComputerName,RebootDay -auto

它将对象收集到一个数组中,然后将整个数组传递给 Format-Table

关于loops - Powershell自定义对象-不传递foreach变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com