This script will access the C: drives of one or more servers and look in the default config file path for INI files. It reads them, parses them, and drops them in a spreadsheet. Change the targets variable to include whatever servers you need.
The resulting spreadsheet is saved in the same folder as the script.
<#==============================================================================
File Name : Wyse-Config-Inventory.ps1
Original Author : Kenneth C. Mazie
:
Description : This script will query
multiple Wyse Client Manager servers,
: detect, read, parse, and
populate an Excel spreadsheet with the
: settings in all located
config files. The spreadsheet headers
: are dynamically generated and
updated to add new entries as
: they are found
:
Arguments : Named commandline
parameters: (all are optional)
: "-console" - Displays console
output during run.
:
"-debug" - Switches email recipient and some criteria.
:
Notes : None
:
Warnings : None
:
Legal : Public Domain. Modify and
redistribute freely. No rights reserved.
: SCRIPT PROVIDED "AS
IS" WITHOUT WARRANTIES OR GUARANTEES OF
: ANY KIND. USE AT YOUR OWN
RISK. NO TECHNICAL SUPPORT PROVIDED.
:
Credits : Code snippets and/or ideas
came from many sources around the web.
:
Last Update by : Kenneth C. Mazie (email
kcmjr AT kcmjr.com for comments or to report bugs)
Version History : v1.0 - 02-03-16 - Original
Change History : v1.1 - 00-00-00 -
:
#===============================================================================#>
#requires -version 3.0
Clear-Host
Param (
[bool]$Debug = $false,
[bool]$Console = $false
)
clear-host
$ErrorActionPreference = "silentlycontinue"
If ($Debug){$Script:Debug = $True}
If ($Console){$Script:Console = $True}
If ($Log){$Script:Log = $True}
$Files = ""
$Today = Get-Date -Format ("MM/dd/yyyy").tostring()
$MissingType = [System.Type]::Missing
$TargetPath = "\c$\inetpub\ftproot\Wyse\wlx\*.ini"
$Targets = @(
"wdm-server1",
"wdm-server2"
)
$Excel = New-Object -ComObject Excel.Application
If ($Script:Console -or $Script:Debug){
$Excel.visible = $True
$Excel.DisplayAlerts = $true
$Excel.ScreenUpdating = $true
$Excel.UserControl = $true
$Excel.Interactive = $true
}Else{
$Excel.visible = $False
$Excel.DisplayAlerts = $false
$Excel.ScreenUpdating = $false
$Excel.UserControl = $false
$Excel.Interactive = $false
}
$Workbook = $Excel.Workbooks.Add()
For ($C=1;$C -lt ($Targets.count+1);$C++){
$WS = $workbook.Sheets.Item($C)
$WS.activate()
$WS.name = $Targets[($C-1)]
}
Foreach ($Server in $Targets){
If ($Script:Console){Write-host "--------
Target Server: $Server --------" -ForegroundColor Yellow}
If ($Script:Console){Write-host "Full
Path: \\$Server$TargetPath" -ForegroundColor Cyan }
$FileList = Get-ChildItem -Path "\\$Server$TargetPath"
$Worksheet = $Workbook.Sheets.Item($Server)
$Worksheet.Activate()
$Worksheet.Rows.Item("2:2").Select()
$WorkSheet.application.activewindow.freezepanes
= $true
$Worksheet.Cells.Item(1,1).Select()
$WorkSheet.Cells.Item(1,1)
= "MAC
Address"
$Row = 2
ForEach ($ConfigFile in $FileList){
$FileName = ($ConfigFile.ToString()).split("\")[8]
$ConfigFile | Get-Member
If ($Script:Console){Write-host "-------
Processing: $FileName -------" -ForegroundColor Magenta }
$Col = 1
$Filtered = @()
$Script:LineItem = ""
$InputFile = Get-Content $Script:ConfigFile
$Target = ($Script:ConfigFile).name.Split(".")[0]
ForEach ($Script:LineItem in $InputFile){
If ($Script:LineItem -match "="){
$Filtered += $Script:LineItem
}
}
$WorkSheet.Cells.Item(1,1).entireRow.font.bold
= $True
$WorkSheet.Cells.Item($Row,1) = $Target
If ($Script:Console){Write-host "Line
Count :"$Filtered.count}
$TotalColumns = $Filtered.count
if ($Col -gt $TotalColumns ){
If ($Script:Console){Write-host "TERMINATED" -ForegroundColor Red}
break;break;break
}
ForEach ($Script:LineItem in $Filtered){
If ($Script:Console){Write-host "----------
Line Item Loop ----------" -ForegroundColor Magenta}
If ($Script:Console){Write-host "Line
Item :"$Script:LineItem -ForegroundColor Cyan}
$Property = $Script:LineItem.Split("=")[0]
$Value = $Script:LineItem.Split("=")[1]
If ($Script:Console){Write-host "Line
Property :"$Property -ForegroundColor Cyan}
If ($Script:Console){Write-host "Line
Value :"$Value -ForegroundColor Cyan}
If ($Script:Console){Write-host "Spreadsheet
Row :"$Row -ForegroundColor Cyan}
$RowOneRange = '"A2","A'+($Filtered.count+1)+'"'
$WorkSheet.Cells.Item($Row,1) = $Target
$Count = 1
$Col = 2
$Found = $False
while ($Count -le ($Filtered.count+1)){
If ($Script:Console){Write-host "-------
Dynamic Column Loop -------" -ForegroundColor Magenta }
$Range = $Worksheet.Range("A1").EntireRow
$Search = $Range.find($Property,[Type]::Missing,[Type]::Missing,1)
if ($search -eq $null) {
$xlCellTypeLastCell = 11
$LastCol = $WorkSheet.UsedRange
$lastCell = $LastCol.SpecialCells($xlCellTypeLastCell)
$newcol = $lastCell.column +1
If ($Script:Console){Write-host "NULL
search result up to column"$lastCell.column.ToString() -ForegroundColor Yellow}
If ($Script:Console){Write-host "Adding
NEW column"$lastCell.column.ToString()"header..." -ForegroundColor Green}
$WorkSheet.Cells.Item(1,$newcol) = $Property
If ($Script:Console){Write-host 'Adding VALUE
to row'$Row' column'($NewCol-1)'...' -ForegroundColor Green}
$WorkSheet.Cells.Item($Row,$newcol) = $Value
$Count ++
$Col++
break
}Else{
If ($Script:Console){Write-host 'Located
PROPERTY at column'$Lastcell.Column.ToString() -ForegroundColor Yellow}
If ($Script:Console){Write-host 'Adding VALUE
to row'$Row' column'($NewCol-1)'...' -ForegroundColor Green}
$WorkSheet.Cells.Item($Row,$Search.Column) = $Value
$Count ++
$Col++
break
}
If ($Script:Console){Write-host "----
Exiting Dynamic Column Loop ----" -ForegroundColor Magenta }
}
$Resize = $WorkSheet.UsedRange
[void]$Resize.EntireColumn.AutoFit()
If ($Script:Console){Write-host "------
Exiting Line Item loop ------" -ForegroundColor Magenta}
}
$Row++
}
}
$SaveFile = "$PSScriptRoot\WyseInventory-{0:dd-MM-yyyy_HHmm}.xlsx" -f (Get-Date) #--[ Places a date stamped spreadsheet
in the script folder ]------
$Workbook.SaveAs($SaveFile)
$Excel.Quit()
$Excel = $Null
[void][gc]::Collect()
[void][gc]::WaitForPendingFinalizers()
If ($Script:Console){Write-host "`n---
Completed ---" -ForegroundColor Red}
No comments:
Post a Comment