我有一个脚本,它在下面ping一个机器列表,将结果输出到CSV,并获取机器的lastlogontimestamp。
它工作得很好,除了最后的登录时间戳是这样的:
CCC-APP01172.22.100.15,@{lastLogonDate=2018年7月25日13:24:54}
我如何摆脱多余的字符:@{lastLogonDate=…}?
$OutputCSV = "C:TEMPOUPingResults.csv"
$SearchLocation = "OU=AA,OU=Servers,DC=LocA,DC=XYZ,DC=com"
$Computers = Get-ADComputer -Filter * -SearchBase $SearchLocation |
Select Name |
Sort-Object Name
$Computers = $Computers.Name
$Headers = "ComputerName,IP Address,LastLogonTimeStamp"
$Headers | Out-File -FilePath $OutputCSV -Encoding UTF8
foreach ($computer in $Computers) {
Write-host "Pinging $Computer"
$Test = Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue -ErrorVariable Err
if ($test -ne $null) {
$IP = $Test.IPV4Address.IPAddressToString
$LastLogonTimeStamp = Get-ADComputer $Computer -Prop CN,lastLogonTimestamp |
Select @{n="lastLogonDate";e={[datetime]::FromFileTime($_.lastLogonTimestamp)}}
$Output = "$Computer,$IP,$LastLogonTimeStamp"
$Output | Out-File -FilePath $OutputCSV -Encoding UTF8 -Append
} else {
$Output = "$Computer,$Err"
$Output | Out-File -FilePath $OutputCSV -Encoding UTF8 -Append
}
}
表达式... |Select-Object @{N='SomeName';E={"SomeValue"}}
将生成一个对象,该对象的属性名为SomeName
,值为"SomeValue"
。
您在输出中看到的是该对象的字符串表示。
如果只需要值,请将$LastLogonTimeStamp
赋值更改为:
$LastLogonTimeStamp = [datetime]::FromFiletime((Get-ADComputer $Computer -Prop lastLogonTimestamp).lastLogonTimestamp)