【发布时间】:2017-07-29 03:36:25
【问题描述】:
我有一个脚本,它从计算机列表中读取数据,并进行测试连接。如果它从Test-Connection 得到回复,它会执行 if/else 并从 Get-ChildItem 构建一个变量,该变量从可疑系统 C:\Users 读取以查看最后登录的人并选择名称和最后写入最后一个用户登录的时间,并对结果进行Write-Host。如果Test-Conneciton 没有得到回复,它会使用“离线”语句构建系统名称的变量并执行Write-Host 来显示它。然后,为了完成这一切,它将结果导出到 CSV。
我遇到的一些问题:
-
Get-ChildItem的变量执行Select-Object Name, LastWriteTime并将结果构建到变量中。我想单独而不是组合显示这些结果(当然也可以将它们导出到 CSV)。 - 我需要修剪结果或修改脚本,使其不包含多余的字符。
下面是当Test-Connection收到机器回复时Get-ChildItem的结果示例(当然系统名称、IP地址和用户名已经更改以保护无辜者):
SYSTEMNAME @{IPV4Address=192.168.0.1} @{Name=John.Doe; LastWriteTime=03/08/2017 08:11:48}
名称和上次写入时间组合在结果中,我需要在显示和 CSV 导出中将它们分开,并修剪多余的字符。像这样,系统名称、IP 地址、名称和 lastwritetime 都将出现在 CSV 中它们自己的单元格中:
SYSTEMNAME 192.168.0.1 Name=John.Doe LastWriteTime=03/08/2017 08:11:48
代码如下:
$computerList = Get-Content "D:\filelocation\LastLogIn.txt"
foreach ($Computername in $computerList) {
$ipreachable = Test-Connection $computerName -EA SilentlyContinue -Count 1 |
select IPV4address
$output =@()
if ($ipreachable) {
$LastUserLoggedIn = Get-ChildItem "\\$computername\c$\Users" -EA SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object Name, LastWriteTime -First 1
$Details = "$LastUserLoggedIn"
Write-Host $computername $ipreachable $Details
} else {
$details = "$computerName Computer does not exisit or is offline"
Write-Host $Details
}
[PSCustomObject]@{
SystemName = $Computername
IPV4Address = $ipreachable
UserLogInDetails = $details
} | Export-Csv "D:\filelocation\lastuserreults.csv" -NoType -Append
}
【问题讨论】: