PowerShell写主机-NoNewLine

时间:2013-10-04 17:39:45

标签: loops powershell

我有以下脚本查找计算机列表的上次重启时间。当我运行此脚本时,它将第一个计算机名称放在一行上,但时间戳位于第二行。后续计算机都在同一条线上。

以下是示例:

Computer1  
TimeStamp  
Computer2 TimeStamp  
Computer3 TimeStamp
等等......

我希望它是这样的:

Computer1 TimeStamp  
Computer2 TimeStamp  
Computer3 TimeStamp

我做错了什么?

以下是代码:

$listOfComputers = Import-Csv lastReboot.txt
ForEach($computer in $listOfComputers) {
  $name = $computer.Name
  Write-Host $name -NoNewLine
  $wmi = Get-WmiObject -Class Win32_OperatingSystem -Computer $name
  $wmi.ConvertToDateTime($wmi.LastBootUpTime)
}

2 个答案:

答案 0 :(得分:3)

您的输出混合了写主机和默认输出,这通常会导致项目显示错误的顺序和其他格式问题:

尝试:

$listOfComputers = IMPORT-CSV lastReboot.txt
ForEach($computer in $listOfComputers){
$name = $computer.Name
Write-Host "$name " -NoNewLine
$wmi = Get-WmiObject -Class Win32_OperatingSystem -Computer $name
write-host $wmi.ConvertToDateTime($wmi.LastBootUpTime)
}

答案 1 :(得分:1)

-computernameget-wmiobject一起使用时,您会在结果中获得一个额外字段 - PSComputerName。您可以选择该字段,以便轻松获得与其他数据相关的名称。

将它与select-object中的表达式相结合,你得到一个漂亮的表格。但是等等 - 还有更多!

Get-WMIObject可以为-computername参数设置数组名称,完全不需要你的循环。

$listOfComputers = IMPORT-CSV r:\lastReboot.txt
$wmi = Get-WmiObject -Class Win32_OperatingSystem -Computer $listOfComputers.Name;
$wmi |select pscomputername,@{Name="LastBootTime";Expression={$_.converttodatetime($_.lastbootuptime);}};

我们还可以删除$wmi变量并在一个管道中完成所有操作(为了清晰起见,添加了换行符)。

$listOfComputers = IMPORT-CSV r:\lastReboot.txt
Get-WmiObject -Class Win32_OperatingSystem -Computer $listOfComputers.Name |`
    select-object pscomputername,@{Name="LastBootTime";Expression={$_.converttodatetime($_.lastbootuptime);}};

甚至可以进行整个导入,查询和查询单次输出:

IMPORT-CSV r:\lastReboot.txt |`
    select-object -ExpandProperty name |`
    foreach-object{ Get-WmiObject -Class Win32_OperatingSystem -Computer $_} |`
    select-object pscomputername,@{Name="LastBootTime";Expression={$_.converttodatetime($_.lastbootuptime);}};

如果您需要保留数据以供日后使用,可以在最后两个示例中的任何一个的开头指定$wmi =的变量(确切地说,在第一个示例中为第二行)。

编辑:我记得AliasProperty PSComputerName是在v3中添加的(或在v2中被破坏)。因此,如果您使用的是v2,则需要使用__SERVER