【问题标题】:How can I format this output better?如何更好地格式化此输出?
【发布时间】:2018-09-18 14:56:58
【问题描述】:

我想将输出通过管道传输到 .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
}

【问题讨论】:

  • 没有广告要检查,但它可能很简单:select name,LastLogin,@{l='hostname';e={$computer}}

标签: powershell export-to-csv


【解决方案1】:

所以基本上你可以将主机名从 $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:\Test\test.csv"

这部分为创建的 PSCustomObject 添加了一个新属性。它存储主机名。然后它按照 HostName、Name、LastLogin 的顺序对 customobject 进行重新排序

%{ 
    $_ | 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:\scripts\test.csv" -NoTypeInformation

【讨论】:

  • 杰出...我唯一更改的是 $env:computername 以匹配 foreach 循环中的变量...感谢百万兄弟!
  • $computers = Get-Content C:\Inf_IT\InputLists\input.txt ForEach ($Computer in $Computer) {$([ADSI]"WinNT://$Computer").Children | {$_.SchemaClassName -eq 'user'} |选择@{l='name';e={$_.name}},@{l='LastLogin';e={$_.lastlogin}} | foreach 对象 {$_ | Add-Member -MemberType NoteProperty -Name "HostName" -Value "$Computer"; $_ |选择对象“HostName”、“Name”、“LastLogin”} | Export-Csv "C:\inf_It\Output\output.csv" -NoTypeInformation -Append}
猜你喜欢
  • 2020-11-14
  • 1970-01-01
  • 2011-04-13
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多