Add AD scripts and stage import instructions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
sysadmin
2026-04-03 09:48:59 -07:00
parent 88dc431cfa
commit aed04e8ca4
7 changed files with 726 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
<#
.SYNOPSIS
Rotates and cleans up old log files.
.DESCRIPTION
Removes transcript and log files older than the specified retention period.
Designed to run as a scheduled task daily.
.PARAMETER RetentionDays
Number of days to retain log files. Default is 30.
.PARAMETER LogPath
Path to the logs directory. Default is C:\ClaudeTools\Logs.
.PARAMETER WhatIf
Shows what would be deleted without actually deleting.
.EXAMPLE
.\Invoke-LogRotation.ps1
Removes logs older than 30 days.
.EXAMPLE
.\Invoke-LogRotation.ps1 -RetentionDays 14 -WhatIf
Shows what would be deleted with 14-day retention.
.NOTES
Author: ClaudeTools Automation
Version: 1.0
#>
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory=$false)]
[int]$RetentionDays = 30,
[Parameter(Mandatory=$false)]
[string]$LogPath = "C:\ClaudeTools\Logs"
)
$rotationLog = Join-Path $LogPath "rotation.log"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
function Write-Log {
param([string]$Message)
$logEntry = "[$timestamp] $Message"
Add-Content -Path $rotationLog -Value $logEntry
Write-Host $logEntry
}
Write-Log "=== Log Rotation Started ==="
Write-Log "Retention Period: $RetentionDays days"
Write-Log "Log Path: $LogPath"
$cutoffDate = (Get-Date).AddDays(-$RetentionDays)
$totalDeleted = 0
$totalSizeFreed = 0
# Find and delete old files
$oldFiles = Get-ChildItem -Path $LogPath -Recurse -File |
Where-Object { $_.LastWriteTime -lt $cutoffDate -and $_.Name -ne "rotation.log" }
$fileCount = ($oldFiles | Measure-Object).Count
Write-Log "Found $fileCount files older than $RetentionDays days"
foreach ($file in $oldFiles) {
$fileSize = $file.Length
$filePath = $file.FullName
if ($PSCmdlet.ShouldProcess($filePath, "Delete")) {
try {
Remove-Item $filePath -Force
$totalDeleted++
$totalSizeFreed += $fileSize
Write-Log "Deleted: $filePath ($([math]::Round($fileSize/1KB, 2)) KB)"
} catch {
Write-Log "ERROR deleting $filePath : $_"
}
} else {
Write-Log "WhatIf: Would delete $filePath ($([math]::Round($fileSize/1KB, 2)) KB)"
}
}
# Delete empty subdirectories
$emptyDirs = Get-ChildItem -Path $LogPath -Directory -Recurse |
Where-Object { (Get-ChildItem $_.FullName -Force).Count -eq 0 }
foreach ($dir in $emptyDirs) {
if ($PSCmdlet.ShouldProcess($dir.FullName, "Remove empty directory")) {
try {
Remove-Item $dir.FullName -Force
Write-Log "Removed empty directory: $($dir.FullName)"
} catch {
Write-Log "ERROR removing directory $($dir.FullName) : $_"
}
}
}
# Summary
$sizeMB = [math]::Round($totalSizeFreed / 1MB, 2)
Write-Log "=== Rotation Complete ==="
Write-Log "Files Deleted: $totalDeleted"
Write-Log "Space Freed: $sizeMB MB"
# Show current disk usage
$currentSize = (Get-ChildItem -Path $LogPath -Recurse -File | Measure-Object -Property Length -Sum).Sum
$currentSizeMB = [math]::Round($currentSize / 1MB, 2)
Write-Log "Current Log Directory Size: $currentSizeMB MB"