Solved

Formating Table output so that it doesn't truncate columns

Posted on 2013-12-04
3
3,515 Views
Last Modified: 2013-12-09
Ok,

So I have a PowerShell script what now works pretty well to dump a basic weekly audit.

The big issue at this point is that it mails a text file that tells me:

- Accounts created this week
- Groups modified this week
- Users not logged on in 30 days
- Users not logged on in 30-60 days
- Users not logged on in over 90 days
- Users with active accounts that haven't logged on ever

To create the output, I'm doing this:

$OutputfilePath = "C:\ADUserAudit-"+([datetime]::Now).tostring("yyyyMMdd")+".txt"
$30DaysTable = ($30Days | format-table)
$60DaysTable = ($60Days | format-table)
$90DaysTable = ($90Days | format-table)

# Get users that have never logged in, but use Windows AD Powershell cmdlets as it should look at all domain controllers. Not restricted to OU:

$NeverBeenKissed = get-aduser -f {-not ( lastlogontimestamp -like "*") -and (enabled -eq $true)} | select samaccountname,name,distinguishedname

$NeverBeenKissedTable = $NeverBeenKissed | format-table
 
# Write to a file

Out-File $OutputfilePath

Add-Content -Path $OutputfilePath "Users Created in the Last Week:"
Add-Content -Path $OutputfilePath " "
$UsersCreatedLastWeekTable | Out-File $OutputfilePath -append
Add-Content -Path $OutputfilePath "Groups Modified in the Last Week:"
Add-Content -Path $OutputfilePath " "
$GroupsModifiedLastWeekTable | Out-File $OutputfilePath -append
Add-Content -Path $OutputfilePath "Users not logged in for 30 days:"
Add-Content -Path $OutputfilePath " "
$30DaysTable | Out-File $OutputfilePath -append
Add-Content -Path $OutputfilePath "Users not logged in for 60-90 days:"
Add-Content -Path $OutputfilePath " "
$60DaysTable | Out-File $OutputfilePath -append
Add-Content -Path $OutputfilePath "Users not logged in for over 90 days:"
Add-Content -Path $OutputfilePath " "
$90DaysTable | Out-File $OutputfilePath -append
Add-Content -Path $OutputfilePath "Users who have NEVER logged in!:"
Add-Content -Path $OutputfilePath " "
$NeverBeenKissedTable | Out-File $OutputfilePath -append

Open in new window


When I run the powershell script manually, I get a non-truncated output.  When I run it as a timer job, I get:

Name                       DN                                          samaccountname          
----                             --                                             --------------          
John Smith              CN=John Smith,OU=Use...    jsmith

I've looked at the format-table options, and I don't really see one that will obviously fix my problem.

How to I fix this, or put it in a format that will allow me to email it without loosing critical information?

My email command is this:

Send-MailMessage -To "group@company.com” -Subject “User Audit 7/7/30/60/90” -From “PowerShellAudit@company.com” -Body “Current weekly AD User Audit is attached. Note: You need to look at this file full screen.” -Priority High -SmtpServer $smtpServer -Attachments $OutputfilePath 

Open in new window

0
Comment
Question by:gerhardub
  • 2
3 Comments
 
LVL 18

Expert Comment

by:Raheman M. Abdul
ID: 39696040
Use -Autosize at the end of the format-table
Or
use -Wrap option
0
 
LVL 1

Accepted Solution

by:
gerhardub earned 0 total points
ID: 39696443
I ended up putting this in the beginning of the script... the blue and white is not needed.

# Prepare the UI environment so that we don't have an issue with the report being truncated:

$Shell = $Host.UI.RawUI
$Shell.WindowTitle="One PowerShell to Rule Them"
$Shell.BackgroundColor="Blue"
$Shell.ForegroundColor="White"
$size = $Shell.WindowSize
$size.width=240
$size.height=60
$Shell.WindowSize = $size
$size.width=240
$size.height=3000
$Shell.BufferSize = $size
Clear-Host

This was repurposed from a $profile article... so obviously the blue and white doesn't matter.  However, as long as the width does not exceed 240 characters, then the OU will not be truncated.

Using -WRAP or -AUTOSIZE causes other issues:

Wrap will make the report very hard to read, and autosize still operates as if the screen width is 120 chacters and truncates the report.
0
 
LVL 1

Author Closing Comment

by:gerhardub
ID: 39705721
This solution prevents -wrap and it's readability issues, and the fact the -autosize only works within the confines of the current shell environment (which is 120 characters when running as a Windows timer job).
0

Featured Post

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article will help you understand what HashTables are and how to use them in PowerShell.
Last week, our Skyport webinar on “How to secure your Active Directory” (https://www.experts-exchange.com/videos/5810/Webinar-Is-Your-Active-Directory-as-Secure-as-You-Think.html) provided 218 attendees with a step-by-step guide for identifying Acti…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question