Initial commit: Organized PowerShell scripts for ShopDB asset collection
Structure: - asset-collection/: Local PC data collection scripts - remote-execution/: WinRM remote execution scripts - setup-utilities/: Configuration and testing utilities - registry-backup/: GE registry backup scripts - winrm-https/: WinRM HTTPS certificate setup - docs/: Complete documentation Each folder includes a README with detailed documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
382
winrm-https/deployment-package/View-DeploymentLogs.ps1
Normal file
382
winrm-https/deployment-package/View-DeploymentLogs.ps1
Normal file
@@ -0,0 +1,382 @@
|
||||
#Requires -RunAsAdministrator
|
||||
<#
|
||||
.SYNOPSIS
|
||||
View deployment logs from S:\DT\ADATA\SCRIPT\DEPLOY\LOGS
|
||||
|
||||
.DESCRIPTION
|
||||
Helper script to view, search, and analyze deployment logs.
|
||||
|
||||
.PARAMETER Latest
|
||||
Show only the most recent log files.
|
||||
|
||||
.PARAMETER Hostname
|
||||
Filter logs by hostname.
|
||||
|
||||
.PARAMETER Date
|
||||
Filter logs by date (YYYYMMDD format).
|
||||
|
||||
.PARAMETER Failed
|
||||
Show only logs that indicate failures.
|
||||
|
||||
.PARAMETER Successful
|
||||
Show only logs that indicate successful deployments.
|
||||
|
||||
.EXAMPLE
|
||||
.\View-DeploymentLogs.ps1
|
||||
|
||||
.EXAMPLE
|
||||
.\View-DeploymentLogs.ps1 -Latest 10
|
||||
|
||||
.EXAMPLE
|
||||
.\View-DeploymentLogs.ps1 -Hostname "G1JJVH63ESF"
|
||||
|
||||
.EXAMPLE
|
||||
.\View-DeploymentLogs.ps1 -Failed
|
||||
|
||||
.NOTES
|
||||
Author: System Administrator
|
||||
Date: 2025-10-17
|
||||
Version: 1.0
|
||||
#>
|
||||
|
||||
param(
|
||||
[Parameter(Mandatory=$false)]
|
||||
[int]$Latest = 0,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[string]$Hostname,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[string]$Date,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[switch]$Failed,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[switch]$Successful
|
||||
)
|
||||
|
||||
$LogDir = "S:\DT\ADATA\SCRIPT\DEPLOY\LOGS"
|
||||
|
||||
function Show-Menu {
|
||||
Write-Host "`n========================================" -ForegroundColor Cyan
|
||||
Write-Host "WinRM HTTPS Deployment Log Viewer" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Log Directory: $LogDir" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "1. List all logs" -ForegroundColor White
|
||||
Write-Host "2. Show latest logs" -ForegroundColor White
|
||||
Write-Host "3. Search by hostname" -ForegroundColor White
|
||||
Write-Host "4. Show failed deployments" -ForegroundColor White
|
||||
Write-Host "5. Show successful deployments" -ForegroundColor White
|
||||
Write-Host "6. Generate summary report" -ForegroundColor White
|
||||
Write-Host "Q. Quit" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
function Get-DeploymentLogs {
|
||||
param([string]$Filter = "*")
|
||||
|
||||
if (-not (Test-Path $LogDir)) {
|
||||
Write-Host "[ERROR] Log directory not found: $LogDir" -ForegroundColor Red
|
||||
return @()
|
||||
}
|
||||
|
||||
$logs = Get-ChildItem -Path $LogDir -Filter "$Filter*.txt" |
|
||||
Sort-Object LastWriteTime -Descending
|
||||
|
||||
return $logs
|
||||
}
|
||||
|
||||
function Show-LogContent {
|
||||
param([string]$LogPath)
|
||||
|
||||
Write-Host "`n========================================" -ForegroundColor Cyan
|
||||
Write-Host "Log File: $(Split-Path $LogPath -Leaf)" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Get-Content $LogPath | ForEach-Object {
|
||||
if ($_ -match 'ERROR|FAIL') {
|
||||
Write-Host $_ -ForegroundColor Red
|
||||
}
|
||||
elseif ($_ -match 'SUCCESS|OK') {
|
||||
Write-Host $_ -ForegroundColor Green
|
||||
}
|
||||
elseif ($_ -match 'WARN') {
|
||||
Write-Host $_ -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
Write-Host $_
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
function Get-DeploymentSummary {
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
$summary = @{
|
||||
Total = $logs.Count
|
||||
Successful = 0
|
||||
Failed = 0
|
||||
Hostnames = @{}
|
||||
}
|
||||
|
||||
foreach ($log in $logs) {
|
||||
$content = Get-Content $log.FullName -Raw
|
||||
|
||||
# Extract hostname from filename
|
||||
$filename = $log.Name
|
||||
if ($filename -match '^([^-]+)-') {
|
||||
$hostname = $matches[1]
|
||||
if (-not $summary.Hostnames.ContainsKey($hostname)) {
|
||||
$summary.Hostnames[$hostname] = @{
|
||||
Total = 0
|
||||
Successful = 0
|
||||
Failed = 0
|
||||
LastDeployment = $log.LastWriteTime
|
||||
}
|
||||
}
|
||||
$summary.Hostnames[$hostname].Total++
|
||||
}
|
||||
|
||||
# Check if successful or failed
|
||||
if ($content -match 'SUCCESS.*Complete|Setup Complete') {
|
||||
$summary.Successful++
|
||||
if ($hostname) {
|
||||
$summary.Hostnames[$hostname].Successful++
|
||||
}
|
||||
}
|
||||
elseif ($content -match 'ERROR|FAIL|failed') {
|
||||
$summary.Failed++
|
||||
if ($hostname) {
|
||||
$summary.Hostnames[$hostname].Failed++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $summary
|
||||
}
|
||||
|
||||
function Show-SummaryReport {
|
||||
Write-Host "`n========================================" -ForegroundColor Cyan
|
||||
Write-Host "Deployment Summary Report" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$summary = Get-DeploymentSummary
|
||||
|
||||
Write-Host "Total Logs: $($summary.Total)" -ForegroundColor White
|
||||
Write-Host "Successful: $($summary.Successful)" -ForegroundColor Green
|
||||
Write-Host "Failed: $($summary.Failed)" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
|
||||
if ($summary.Hostnames.Count -gt 0) {
|
||||
Write-Host "Deployment by Hostname:" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
$summary.Hostnames.GetEnumerator() |
|
||||
Sort-Object { $_.Value.LastDeployment } -Descending |
|
||||
ForEach-Object {
|
||||
$hostname = $_.Key
|
||||
$stats = $_.Value
|
||||
$status = if ($stats.Successful -gt 0) { "SUCCESS" } else { "FAILED" }
|
||||
$color = if ($stats.Successful -gt 0) { "Green" } else { "Red" }
|
||||
|
||||
Write-Host " $hostname - $status (Attempts: $($stats.Total), Last: $($stats.LastDeployment))" -ForegroundColor $color
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Main execution
|
||||
try {
|
||||
# Check if log directory exists
|
||||
if (-not (Test-Path $LogDir)) {
|
||||
Write-Host "[WARN] Log directory does not exist: $LogDir" -ForegroundColor Yellow
|
||||
Write-Host "Creating log directory..." -ForegroundColor Yellow
|
||||
New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
|
||||
Write-Host "[OK] Log directory created" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Handle command-line parameters
|
||||
if ($Latest -gt 0) {
|
||||
Write-Host "`nShowing $Latest most recent logs:" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs | Select-Object -First $Latest
|
||||
|
||||
foreach ($log in $logs) {
|
||||
Write-Host "$($log.Name) - $(Get-Date $log.LastWriteTime -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor White
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
exit 0
|
||||
}
|
||||
|
||||
if ($Hostname) {
|
||||
Write-Host "`nShowing logs for hostname: $Hostname" -ForegroundColor Cyan
|
||||
|
||||
$logs = Get-DeploymentLogs -Filter $Hostname
|
||||
|
||||
if ($logs.Count -eq 0) {
|
||||
Write-Host "[WARN] No logs found for hostname: $Hostname" -ForegroundColor Yellow
|
||||
exit 0
|
||||
}
|
||||
|
||||
foreach ($log in $logs) {
|
||||
Show-LogContent -LogPath $log.FullName
|
||||
}
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
if ($Failed) {
|
||||
Write-Host "`nShowing failed deployments:" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
foreach ($log in $logs) {
|
||||
$content = Get-Content $log.FullName -Raw
|
||||
if ($content -match 'ERROR|FAIL|failed') {
|
||||
Write-Host "$($log.Name) - FAILED" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
exit 0
|
||||
}
|
||||
|
||||
if ($Successful) {
|
||||
Write-Host "`nShowing successful deployments:" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
foreach ($log in $logs) {
|
||||
$content = Get-Content $log.FullName -Raw
|
||||
if ($content -match 'SUCCESS.*Complete|Setup Complete') {
|
||||
Write-Host "$($log.Name) - SUCCESS" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Interactive menu if no parameters
|
||||
while ($true) {
|
||||
Show-Menu
|
||||
$choice = Read-Host "Select an option"
|
||||
|
||||
switch ($choice) {
|
||||
"1" {
|
||||
Write-Host "`nAll deployment logs:" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
foreach ($log in $logs) {
|
||||
Write-Host "$($log.Name) - $(Get-Date $log.LastWriteTime -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor White
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"2" {
|
||||
$count = Read-Host "How many recent logs to show?"
|
||||
|
||||
Write-Host "`nShowing $count most recent logs:" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs | Select-Object -First ([int]$count)
|
||||
|
||||
foreach ($log in $logs) {
|
||||
Write-Host "$($log.Name) - $(Get-Date $log.LastWriteTime -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor White
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"3" {
|
||||
$searchHostname = Read-Host "Enter hostname to search"
|
||||
|
||||
Write-Host "`nShowing logs for hostname: $searchHostname" -ForegroundColor Cyan
|
||||
|
||||
$logs = Get-DeploymentLogs -Filter $searchHostname
|
||||
|
||||
if ($logs.Count -eq 0) {
|
||||
Write-Host "[WARN] No logs found for hostname: $searchHostname" -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
foreach ($log in $logs) {
|
||||
Show-LogContent -LogPath $log.FullName
|
||||
}
|
||||
}
|
||||
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"4" {
|
||||
Write-Host "`nFailed deployments:" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
foreach ($log in $logs) {
|
||||
$content = Get-Content $log.FullName -Raw
|
||||
if ($content -match 'ERROR|FAIL|failed') {
|
||||
Write-Host "$($log.Name) - FAILED" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"5" {
|
||||
Write-Host "`nSuccessful deployments:" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
$logs = Get-DeploymentLogs
|
||||
|
||||
foreach ($log in $logs) {
|
||||
$content = Get-Content $log.FullName -Raw
|
||||
if ($content -match 'SUCCESS.*Complete|Setup Complete') {
|
||||
Write-Host "$($log.Name) - SUCCESS" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"6" {
|
||||
Show-SummaryReport
|
||||
Read-Host "Press Enter to continue"
|
||||
}
|
||||
|
||||
"Q" {
|
||||
Write-Host "`nExiting..." -ForegroundColor Cyan
|
||||
exit 0
|
||||
}
|
||||
|
||||
default {
|
||||
Write-Host "`n[ERROR] Invalid option" -ForegroundColor Red
|
||||
Start-Sleep -Seconds 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch {
|
||||
Write-Host "`n[ERROR] $($_.Exception.Message)" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user