我正在尝试根据文本文件中的服务器名称创建自定义对象。
我使用的脚本将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-Object
的ForEach
循环(例如$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/