# Test database directly to see if it's corrupted or locked $password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password) Write-Host "[OK] Mounting AD2 C$ share..." -ForegroundColor Green New-PSDrive -Name AD2 -PSProvider FileSystem -Root "\\192.168.0.6\C$" -Credential $cred -ErrorAction Stop | Out-Null $dbPath = "AD2:\Shares\testdatadb\database\testdata.db" Write-Host "[OK] Testing database file access..." -ForegroundColor Green # Test 1: File exists and readable if (Test-Path $dbPath) { Write-Host " [OK] Database file exists" -ForegroundColor Green $dbFile = Get-Item $dbPath Write-Host " [OK] Size: $([math]::Round($dbFile.Length/1MB,2)) MB" -ForegroundColor Cyan Write-Host " [OK] Modified: $($dbFile.LastWriteTime)" -ForegroundColor Cyan } else { Write-Host " [ERROR] Database file not found!" -ForegroundColor Red Remove-PSDrive -Name AD2 exit 1 } # Test 2: Check file lock Write-Host "`n[OK] Checking if file is locked..." -ForegroundColor Green try { $stream = [System.IO.File]::Open($dbFile.FullName, 'Open', 'Read', 'ReadWrite') $stream.Close() Write-Host " [OK] File is not locked" -ForegroundColor Green } catch { Write-Host " [WARNING] File may be locked by another process" -ForegroundColor Yellow Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Yellow } # Test 3: Check file header (SQLite magic bytes) Write-Host "`n[OK] Checking SQLite file header..." -ForegroundColor Green try { $bytes = [System.IO.File]::ReadAllBytes($dbFile.FullName) | Select-Object -First 16 $header = [System.Text.Encoding]::ASCII.GetString($bytes) if ($header.StartsWith("SQLite format 3")) { Write-Host " [OK] Valid SQLite database header detected" -ForegroundColor Green } else { Write-Host " [ERROR] Invalid SQLite header! Database may be corrupted" -ForegroundColor Red Write-Host " Header bytes: $($bytes -join ' ')" -ForegroundColor Yellow } } catch { Write-Host " [ERROR] Cannot read database file: $($_.Exception.Message)" -ForegroundColor Red } # Test 4: Check permissions Write-Host "`n[OK] Checking file permissions..." -ForegroundColor Green $acl = Get-Acl $dbPath Write-Host " Owner: $($acl.Owner)" -ForegroundColor Cyan Write-Host " Access Rules:" -ForegroundColor Cyan $acl.Access | ForEach-Object { Write-Host " $($_.IdentityReference): $($_.FileSystemRights) ($($_.AccessControlType))" -ForegroundColor Gray } # Test 5: Check if there are journal files Write-Host "`n[OK] Checking for journal files..." -ForegroundColor Green $journalFile = Get-Item "$($dbFile.DirectoryName)\testdata.db-journal" -ErrorAction SilentlyContinue if ($journalFile) { Write-Host " [FOUND] Journal file exists: $([math]::Round($journalFile.Length/1KB,2)) KB" -ForegroundColor Yellow Write-Host " [WARNING] This may indicate incomplete transaction or crash" -ForegroundColor Yellow } else { Write-Host " [OK] No journal file (clean state)" -ForegroundColor Green } Remove-PSDrive -Name AD2 -ErrorAction SilentlyContinue Write-Host "`n[OK] Done" -ForegroundColor Green