[英]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.