titanium
titanium

Reputation: 367

How to put a header to csv file generated by Powershell script

I got this Powershell script that queries users that have not changed their password for 24 hours. The query redirects the output to csv file. Below are the Powershell script and batch script:

Powershell script:

$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"
$searcher.sizelimit = 5000

[Void]$searcher.PropertiesToLoad.Add("cn")
[Void]$searcher.PropertiesToLoad.Add("samAccountName")
[Void]$searcher.PropertiesToLoad.Add("pwdLastSet")

$users = $searcher.findall()

$UserOU = "OU=Mountain,DC=Atlanta,DC=ga"
$PWDays = (Get-Date).AddDays(-1)

$UserCount = 0
$UserPW = 0

foreach($user in $users)
    {

    if ($user.path -like "*$UserOU")
        {
        $usercount = $UserCount 

        if ([datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays)
            {
            $UserPW = $UserPW + 1

            Write-Host $user.Properties.cn
            }
        }

    }

Batch script:

powershell.exe d:\temp\query.ps1 > D:\temp\query.csv

My question is: How do I put change the script to put header for username in the the csv output file?

The header may simple be 'Username' not necessarily Firstname and Lastname.

Upvotes: 0

Views: 6199

Answers (2)

Joey
Joey

Reputation: 354426

Any reason why you aren't using Export-Csv? You can just pipe your objects into it and it will include headers. Something along the lines of

$users | 
? { $_.Path -like "*$UserOU" } |
? { [datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays } |
% { $_ | Add-Member -PassThru NoteProperty Username $_.Properties.cn } |
select Username |
Export-Csv D:\temp\query.csv

might work. (Hint: The pipeline is more fun than the loop :))

Upvotes: 3

Ken Egozi
Ken Egozi

Reputation: 1835

Not sure (never have user PS) but I guess that sticking

Write-Host "Username"

before the foreach, might do the trick

Upvotes: 1

Related Questions