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

标签 loops powershell hashtable pscustomobject formattable

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

相关文章:

JavaScript for 循环添加对象到对象

sql-server - 使用PowerShell检查存储过程所需的参数

powershell - 合并多个 CSV 文件

c# - 固定缓存的哈希表大小

loops - lua:遍历表中的所有对

Bash 循环 - 并行化和迭代

bash - 为什么 'for' 循环比从文件读取的 'while' 循环更快?

c# - 通过 C# 中的属性检索嵌套 Powershell 对象的值

c++ - 哈希表 - 条件跳转或移动取决于未初始化的值

C - 需要帮助实现 ADT