需要帮助将本地用户日期导出到 csv ... powershell

问题描述

我编写了一个 PowerShell 脚本来获取每台机器的所有本地用户数据。我需要将这些数据导出到一个漂亮的 .csv 中,其中包含 ComputerName、ComputerStatus、LocalUserName、LocalUserenabled 和 Localuserdescription...

Import-Module ActiveDirectory
$ErrorActionPreference = "SilentlyContinue"
$Computers = Get-ADComputer -Filter {Enabled -eq $True}
$OutputPath = "$Env:Temp"
$OutputFile = Join-Path $OutputPath "LocalAdminsReport.csv"
Add-Content -Path $OutputFile -Value "ComputerName,ComputerStatus,LocalUserName,LocalUserEnabled,LocalUserDescription"

Foreach ($Computer in $Computers) {
    $ComputerName = $Computer.DNSHostName
    $Connectivity = Test-Connection -Computername $ComputerName -Count 1 -Quiet
    if ($Connectivity) {
        Write-Host "Getting local users from $ComputerName"
        $LocalUsers = Invoke-Command -ComputerName $ComputerName {Get-WmiObject -Class Win32_UserAccount -Filter  "LocalAccount='True'"}
        ForEach ($LocalUser in $LocalUsers){
            Add-Content -Path $OutputFile -Value $ComputerName,"Online",-Value $LocalUser.Name,-Value $LocalUser.Enabled,-Value $LocalUser.Description
        }
    } else { 
        Write-Host "$ComputerName Status Offline"
        Add-Content -Path $OutputFile -Value $ComputerName,"Offline",$null,$null
    }
}

Write-Host " "
Write-Host "========================================"
Write-Host "Report Path: $OutputFile "
Write-Host "========================================"

当前导出将所有内容都放入第 1 列,我知道这是因为添加内容,但我真的不知道如何使用 export-csv。

解决方法

确实,Add-Content 并不是创建 CSV 文件的最佳工具。

试试

Import-Module ActiveDirectory
$ErrorActionPreference = "SilentlyContinue"

$OutputFile = Join-Path -Path $env:Temp -ChildPath "LocalAdminsReport.csv"
$Computers  = Get-ADComputer -Filter "Enabled -eq 'True'"  # should be a string

$result = foreach ($Computer in $Computers) {
    $ComputerName = $Computer.DNSHostName
    $Connectivity = Test-Connection -Computername $ComputerName -Count 1 -Quiet

    if ($Connectivity) {
        Write-Host "Getting local users from $ComputerName"
        Invoke-Command -ComputerName $ComputerName -ScriptBlock {Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"} | 
            # output an object
            Select-Object @{Name = 'ComputerName'; Expression = {$ComputerName}},@{Name = 'ComputerStatus'; Expression = {'Online'}},@{Name = 'LocalUserName'; Expression = {$_.Name}},@{Name = 'LocalUserEnabled'; Expression = {!$_.Disabled}},@{Name = 'LocalUserDescription'; Expression = {$_.Description}}
    }
    else { 
        Write-Host "$ComputerName Status Offline"
        # output a similar object for failed computers too
        Select-Object @{Name = 'ComputerName'; Expression = {$ComputerName}},@{Name = 'ComputerStatus'; Expression = {'Offline'}},@{Name = 'LocalUserName'; Expression = {$null}},@{Name = 'LocalUserEnabled'; Expression = {$null}},@{Name = 'LocalUserDescription'; Expression = {$null}}
    }
}

# output to csv file
$result | Export-Csv -Path $OutputFile -NoTypeInformation