# Get-Arieslog # # PowerShell to parse the DeviceUpdateLogs and generate a list of devices # (C) Frank.carius@netatwork.de # Ver 1.0 20110410 Initial version param ( [string]$poolfqdn="", # optional name of the pool [string]$path = "" , # optional path to the logfiles [int]$maxdays =99999, # optional maximum number of days to parse [switch]$verbose = $false, [switch]$debug = $false ) if($Verbose){$VerbosePreference = "Continue"} if($debug){Set-PSDebug -Step} [hashtable]$devices=@{} function ProcessFile { param( [string]$filepath ) Write-Verbose -Message "ProcessFile: $filepath" foreach ($record in(Import-Csv -Path $filepath)){ if ($devices.containskey($record."serial Number")){ if ([datetime]($devices.get_item($record."serial Number"))."Logging DateTime" -ge [datetime]$record."Logging DateTime") { Write-Verbose "Skip outdated line" } else { Write-Verbose "replace with newer data" $devices.set_item($record."serial Number",$record) } } else { Write-Verbose "adding new device" $devices.add($record."serial Number",$record) } } } function parsepath { param( [string]$logfilepath ) Write-Verbose -Message "ParsePath:Start with $logfilepath" foreach ($item in Get-ChildItem -Path $logfilepath) { if ($item.lastwritetime -ge (Get-Date).adddays(-$maxdays)) { Write-verbose -Message "Processing $item.versioninfo.filename" processfile $item.versioninfo.filename } } Write-Verbose -Message "ParsePath:end with $logfilepath" } if ($path -ne "") { parsepath($path) } elseif ($poolfqdn -ne "") { Write-Verbose "Getting path from Pool" $webserverlist = Get-CsService -WebServer -PoolFqdn $poolfqdn } else { Write-Verbose "Search für all pools" $webserverlist = (Get-CsService -WebServer) } if (($webserverlist -eq $null)-and($path -eq "")) { write-error "Invalid parameter usage" } else { foreach ($webserver in $webserverlist) { Write-Host "Processing "$webserver.identity [string]$wsid = $webserver.ServiceID [string]$UNC = (Get-CsService $webserver.filestore).UNCPath [string]$path = "$UNC\$wsid\DeviceUpdateLogs\Server\Audit\imageUpdates" parsepath $path } } foreach ($device in $devices.get_Values()){ $details = $device."Requested[# Seperated für Multiple]".split(";") Add-Member -InputObject $device noteproperty fwname $details[0] Add-Member -InputObject $device noteproperty fwversion $details[1] Add-Member -InputObject $device noteproperty fwdatetime $details[2] $device }