[英]PowerShell Write-Host -NoNewLine
我有以下脚本,可以找到计算机列表的上次重启时间。 当我运行此脚本时,它将第一个计算机名称放在一行上,但时间戳位于第二行。 后续计算机都在同一条线上。
这是一个例子:
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)
}
您为输出混合了写主机和输出默认值,这通常会导致项目以错误的顺序显示以及其他格式问题:
尝试:
$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)
}
当您使用-computername
和get-wmiobject
,您会在结果中获得一个额外的字段 - PSComputerName
。 您可以选择该字段,以便轻松获得与其他数据相关的名称。
将它与select-object
的表达式结合起来,你得到一个漂亮的表。 但是等等 - 还有更多!
Get-WMIObject
可以为-computername
参数Get-WMIObject
一组名称,完全不需要你的循环。
$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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.