0

This script add domain users to any other or remote domain computer / system's 'Administrators' group through the PowerShell.

This returns a final status in a csv with three columns (Computer name, availability, status)

I need to add a fourth column to this output file that contains the time and date.

#Create a file in the required path and update in the below command line
$Output = "C:\CSV\Output.csv" 
#The output field of the computer will blank if the user is already exist in the group
Add-Content -Path $Output -Value "ComputerName,Availability,Status"
$status = $null
$availability = $null
#Save the CSV (Comma seperated) file with the server host name and the username to be added
Import-Csv C:\CSV\Computer.csv | ForEach-Object {
    $Computer=$_.Computer
    $User=$_.user
    if (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {
        Write-Verbose "$Computer : Online"
        $availability="Oniline"
        try {
            $GroupObj=[ADSI]"WinNT://$Computer/Administrators,group"
            $GroupObj.PSBase.Invoke("Add",([ADSI]"WinNT://jdom.edu/$User").Path)
            $status="Success"
            #Update the status in the output file
            Add-Content -Path $Output -Value ("{0},{1},{2}" -f $Computer, $availability, $status)
        } catch {
            Write-Verbose "Failed"
        }
    } else {
        Write-Warning "$Computer : Offline"
        $availability = "Offline"
        $status = "failed"
        #Update the status in the output file
        Add-Content -Path $Output -Value ("{0},{1},{2}" -f $Computer, $availability, $status)
    }
}

This is how the output file looks, this is where I want to add the fourth column with date and time:

ComputerName,Availability,Status
TD123696WJN339P,Oniline,Success
TD123419WJN339P,Oniline,Success
ComputerName,Availability,Status
5VERF9097LTIO01,Offline,failed
ZF001024DJH706G,Offline,failed
5MICF9017LTIO01,Offline,failed

2 Answers 2

2

The simple approach would be to just add another field to your output, i.e.

Add-Content -Path $Output -Value "ComputerName,Availability,Status,Timestamp"

and

"{0},{1},{2},{3}" -f $Computer, $availability, $status, (Get-Date)

However, unless you actually want multiple header lines in your output file (why?) you should rather use calculated properties and Export-Csv.

Import-Csv 'input.csv' |
    Select-Object Computer, User, @{n='Status';e={
        if (Test-Connection -ComputerName $_.Computer -Count 1 -Quiet) {
            ...
        } else {
            ...
        }
    }}, @{n='Timestamp';e={Get-Date}} |
    Export-Csv 'output.csv' -NoType
Sign up to request clarification or add additional context in comments.

Comments

0

This is really interesting approach you have there working with CSV and it overcomplicates the scenario a bit (from my perspective and no disrespect!).

Why don't try using a PowerShell Custom Object?

#Create a file in the required path and update in the below command line
$Output = "C:\CSV\Output.csv" 
#The output field of the computer will blank if the user is already exist in the group
Add-Content -Path $Output -Value "ComputerName,Availability,Status"
$status = $null
$availability = $null
#Save the CSV (Comma seperated) file with the server host name and the username to be added
$result = Import-Csv C:\CSV\Computer.csv | ForEach-Object {
    $Computer=$_.Computer
    $User=$_.user
    if (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {
        Write-Verbose "$Computer : Online"
        $availability="Oniline"
        try {
            $GroupObj=[ADSI]"WinNT://$Computer/Administrators,group"
            $GroupObj.PSBase.Invoke("Add",([ADSI]"WinNT://jdom.edu/$User").Path)
            $status="Success"
            #Update the status in the output file
            [PSCustomObject]@{
                Computer = $Computer
                Availability = $availability
                Status = $status
                Date = Get-Date
            }
        } catch {
            Write-Verbose "Failed"
        }
    } else {
        Write-Warning "$Computer : Offline"
        $availability = "Offline"
        $status = "failed"
        #Update the status in the output file
        [PSCustomObject]@{
            Computer = $Computer
            Availability = $availability
            Status = $status
            Date = Get-Date
        }
    }
}

$result | Export-Csv -Path $Output -NoTypeInformation

This way, you will store the result into the $result variable and will be able to export it as CSV, without any complication. Using PowerShell Custom Object is a great way to store data from different sources and provide the output in the way you would like to see it.

Give it a try and provide a feedback, if you would like :)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.