Select-对象选择多个对象但拆分结果并修剪它们导出到 CSV
Select-Object selecting multiple objects but splitting the results and trimming them export to CSV
我有一个脚本可以从计算机列表中读取,并进行测试连接。如果它从 Test-Connection
得到回复,它会执行 if/else 并从 Get-ChildItem
构建一个变量,该变量从可疑系统 C:\Users
读取以查看最后一个记录的人in 和 select 最后登录用户的姓名和最后写入时间,并对结果进行 Write-Host
。如果 Test-Conneciton
没有得到回复,它会使用 "offline" 语句构建系统名称的变量,并执行 Write-Host
来显示它。然后,为了完成这一切,它将结果导出到 CSV。
我遇到的几件事:
Get-ChildItem
的变量执行 Select-Object Name, LastWriteTime
并将结果构建到变量中。我想单独而不是合并显示这些结果(当然还要将它们导出到 CSV 中)。
- 我需要 trim 结果或修改脚本以使其不在结果中包含额外的字符。
下面是 Test-Connection
收到机器回复时 Get-ChildItem 的结果示例(当然系统名称、IP 地址和用户名已更改以保护无辜者):
SYSTEMNAME @{IPV4Address=192.168.0.1} @{Name=John.Doe; LastWriteTime=03/08/2017 08:11:48}
名称和上次写入时间合并在结果中,我需要在显示和 CSV 导出以及 trim 额外字符中将它们分开。像这样,其中系统名称、IP 地址、名称和上次写入时间都将出现在 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
}
展开IP地址:
... | Select-Object -Expand IPV4Address | Select-Object -Expand IPAddressToString
并且不要将目录信息变成字符串:
<strike>$Details = "$LastUserLoggedIn"</strike>
像这样构建您的数据对象:
$obj = [PSCustomObject]@{
SystemName = $Computername
IPV4Address = $ipreachable
UserName = $LastUserLoggedIn.Name
Timestamp = $LastUserLoggedIn.LastWriteTime
}
以便您可以在控制台上显示信息并将其导出为 CSV:
$obj | Format-Table -AutoSize
$obj | Export-Csv 'C:\path\to\your.csv' -NoType -Append
我有一个脚本可以从计算机列表中读取,并进行测试连接。如果它从 Test-Connection
得到回复,它会执行 if/else 并从 Get-ChildItem
构建一个变量,该变量从可疑系统 C:\Users
读取以查看最后一个记录的人in 和 select 最后登录用户的姓名和最后写入时间,并对结果进行 Write-Host
。如果 Test-Conneciton
没有得到回复,它会使用 "offline" 语句构建系统名称的变量,并执行 Write-Host
来显示它。然后,为了完成这一切,它将结果导出到 CSV。
我遇到的几件事:
Get-ChildItem
的变量执行Select-Object Name, LastWriteTime
并将结果构建到变量中。我想单独而不是合并显示这些结果(当然还要将它们导出到 CSV 中)。- 我需要 trim 结果或修改脚本以使其不在结果中包含额外的字符。
下面是 Test-Connection
收到机器回复时 Get-ChildItem 的结果示例(当然系统名称、IP 地址和用户名已更改以保护无辜者):
SYSTEMNAME @{IPV4Address=192.168.0.1} @{Name=John.Doe; LastWriteTime=03/08/2017 08:11:48}
名称和上次写入时间合并在结果中,我需要在显示和 CSV 导出以及 trim 额外字符中将它们分开。像这样,其中系统名称、IP 地址、名称和上次写入时间都将出现在 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
}
展开IP地址:
... | Select-Object -Expand IPV4Address | Select-Object -Expand IPAddressToString
并且不要将目录信息变成字符串:
<strike>$Details = "$LastUserLoggedIn"</strike>
像这样构建您的数据对象:
$obj = [PSCustomObject]@{
SystemName = $Computername
IPV4Address = $ipreachable
UserName = $LastUserLoggedIn.Name
Timestamp = $LastUserLoggedIn.LastWriteTime
}
以便您可以在控制台上显示信息并将其导出为 CSV:
$obj | Format-Table -AutoSize
$obj | Export-Csv 'C:\path\to\your.csv' -NoType -Append