如何更好地格式化此输出?



我想通过管道将输出传输到.csv,但是当我这样做时,我无法添加主机名,所以我决定将其拍摄到.txt,但是,我没有太多的自由来操纵结果。

最初的单行是:

$([ADSI]"WinNT://$env:COMPUTERNAME").Children | where {$_.SchemaClassName -eq 'user'} | select @{l='name';e={$_.name}},@{l='LastLogin';e={$_.lastlogin}} | export-csv C:csv.csv

我已经修改了它以针对列表运行,但是,原始代码并不表示主机名......我很想知道如何做到这一点。以下是修改后的代码:

$computers = Get-Content C:LocalLogin.txt
ForEach ($Computer in $Computers)
{
$COMPUTER | Out-File C:StaleLocalLogins.txt -Append
$([ADSI]"WinNT://$COMPUTER").Children |
where {$_.SchemaClassName -eq 'user'} |
select @{l='name';e={$_.name}},@{l='LastLogin';e={$_.lastlogin}} |
Out-File C:StaleLocalLogins.txt -Append
}

所以基本上你可以将主机名从$env:COMPUTERNAME添加到脚本的后面部分。下面是一个 1 行,但间隔以方便阅读

$([ADSI]"WinNT://$env:COMPUTERNAME").Children |
where {$_.SchemaClassName -eq 'user'} |
select @{l='name';e={$_.name}},@{l='LastLogin';e={$_.lastlogin}} |
%{
$_ |
Add-Member -MemberType NoteProperty -Name "HostName" -Value "$env:COMPUTERNAME"
$_ | Select-Object "HostName", "Name", "LastLogin"
} | Export-Csv "C:Testtest.csv"

此部分将新属性添加到创建的 PSCustomObject。它存储主机名。然后,它按主机名、名称、上次登录的顺序对自定义对象重新排序

%{ 
$_ | Add-Member -MemberType NoteProperty -Name "HostName" -Value "$env:COMPUTERNAME"
$_ | Select-Object "HostName", "Name", "LastLogin"
}

这里是单行

$([ADSI]"WinNT://$env:COMPUTERNAME").Children | where {$_.SchemaClassName -eq 'user'} | select @{l='name';e={$_.name}},@{l='LastLogin';e={$_.lastlogin}} | foreach-object {$_ | Add-Member -MemberType NoteProperty -Name "HostName" -Value "$env:COMPUTERNAME"; $_ | Select-Object "HostName", "Name", "LastLogin"} | Export-Csv "C:scriptstest.csv" -NoTypeInformation

最新更新