-
This commit is contained in:
parent
5c43bdeabf
commit
02d9cc72ca
1 changed files with 165 additions and 117 deletions
282
optimization.ps1
282
optimization.ps1
|
|
@ -29,115 +29,87 @@ $ScriptResult = @{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Temp files for output capture
|
||||||
$tempPath = $env:TEMP
|
$tempPath = $env:TEMP
|
||||||
|
$chkdskStdout = "$tempPath\chkdsk_stdout.txt"
|
||||||
# Function to run process in new window with live output
|
$chkdskStderr = "$tempPath\chkdsk_stderr.txt"
|
||||||
function Start-ProcessWithNewWindow {
|
$sfcStdout = "$tempPath\sfc_stdout.txt"
|
||||||
param(
|
$sfcStderr = "$tempPath\sfc_stderr.txt"
|
||||||
[string]$FilePath,
|
$dismStdout = "$tempPath\dism_stdout.txt"
|
||||||
[string]$Arguments,
|
$dismStderr = "$tempPath\dism_stderr.txt"
|
||||||
[string]$Name
|
|
||||||
)
|
|
||||||
|
|
||||||
$stdoutFile = "$tempPath\${Name}_stdout.txt"
|
|
||||||
$stderrFile = "$tempPath\${Name}_stderr.txt"
|
|
||||||
|
|
||||||
# Clean up old files
|
|
||||||
if (Test-Path $stdoutFile) { Remove-Item $stdoutFile -Force -ErrorAction SilentlyContinue }
|
|
||||||
if (Test-Path $stderrFile) { Remove-Item $stderrFile -Force -ErrorAction SilentlyContinue }
|
|
||||||
|
|
||||||
Write-Host "Starting $Name in new window..."
|
|
||||||
|
|
||||||
# Start process in new window (removed -NoNewWindow)
|
|
||||||
$process = Start-Process -FilePath $FilePath -ArgumentList $Arguments -PassThru -RedirectStandardOutput $stdoutFile -RedirectStandardError $stderrFile -ErrorAction Stop
|
|
||||||
|
|
||||||
# Poll output files while process runs
|
|
||||||
$lastStdoutPos = 0
|
|
||||||
$lastStderrPos = 0
|
|
||||||
|
|
||||||
while (-not $process.HasExited) {
|
|
||||||
Start-Sleep -Milliseconds 300
|
|
||||||
|
|
||||||
# Read new stdout content
|
|
||||||
if (Test-Path $stdoutFile) {
|
|
||||||
$stdoutSize = (Get-Item $stdoutFile).Length
|
|
||||||
if ($stdoutSize -gt $lastStdoutPos) {
|
|
||||||
$stream = [System.IO.File]::OpenRead($stdoutFile)
|
|
||||||
$stream.Seek($lastStdoutPos, [System.IO.SeekOrigin]::Begin) | Out-Null
|
|
||||||
$bytesToRead = $stdoutSize - $lastStdoutPos
|
|
||||||
$buffer = New-Object byte[] $bytesToRead
|
|
||||||
$stream.Read($buffer, 0, $bytesToRead) | Out-Null
|
|
||||||
$stream.Close()
|
|
||||||
$text = [System.Text.Encoding]::UTF8.GetString($buffer)
|
|
||||||
if ($text) { Write-Host $text -NoNewline }
|
|
||||||
$lastStdoutPos = $stdoutSize
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Read new stderr content
|
|
||||||
if (Test-Path $stderrFile) {
|
|
||||||
$stderrSize = (Get-Item $stderrFile).Length
|
|
||||||
if ($stderrSize -gt $lastStderrPos) {
|
|
||||||
$stream = [System.IO.File]::OpenRead($stderrFile)
|
|
||||||
$stream.Seek($lastStderrPos, [System.IO.SeekOrigin]::Begin) | Out-Null
|
|
||||||
$bytesToRead = $stderrSize - $lastStderrPos
|
|
||||||
$buffer = New-Object byte[] $bytesToRead
|
|
||||||
$stream.Read($buffer, 0, $bytesToRead) | Out-Null
|
|
||||||
$stream.Close()
|
|
||||||
$text = [System.Text.Encoding]::UTF8.GetString($buffer)
|
|
||||||
if ($text) { Write-Host $text -NoNewline }
|
|
||||||
$lastStderrPos = $stderrSize
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Wait a moment for any final output
|
|
||||||
Start-Sleep -Milliseconds 500
|
|
||||||
|
|
||||||
# Read final output
|
|
||||||
$outputText = ""
|
|
||||||
if (Test-Path $stdoutFile) { $outputText = Get-Content -Path $stdoutFile -Raw -ErrorAction SilentlyContinue }
|
|
||||||
if (Test-Path $stderrFile) { $outputText += Get-Content -Path $stderrFile -Raw -ErrorAction SilentlyContinue }
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
Remove-Item $stdoutFile -Force -ErrorAction SilentlyContinue
|
|
||||||
Remove-Item $stderrFile -Force -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
return @{
|
|
||||||
ExitCode = $process.ExitCode
|
|
||||||
Output = $outputText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Run CHKDSK
|
# Run CHKDSK
|
||||||
Write-Host "=========================================="
|
|
||||||
Write-Host "Running CHKDSK with /R option..."
|
Write-Host "Running CHKDSK with /R option..."
|
||||||
Write-Host "Note: A new window will open for CHKDSK"
|
Write-Host "Note: If volume is in use, CHKDSK will be scheduled for next reboot."
|
||||||
Write-Host "=========================================="
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = Start-ProcessWithNewWindow -FilePath "cmd" -Arguments "/c echo Y | chkdsk C: /R" -Name "chkdsk"
|
# Use cmd /c with echo Y piped, redirect output
|
||||||
$ChkdskExitCode = $result.ExitCode
|
$process = Start-Process -FilePath "cmd" -ArgumentList "/c", "echo Y | chkdsk C: /R" -NoNewWindow -Wait -PassThru -RedirectStandardOutput $chkdskStdout -RedirectStandardError $chkdskStderr -ErrorAction Stop
|
||||||
$outputText = $result.Output
|
$ChkdskExitCode = $process.ExitCode
|
||||||
|
|
||||||
|
# Read output
|
||||||
|
$outputText = ""
|
||||||
|
if (Test-Path $chkdskStdout) {
|
||||||
|
$outputText = Get-Content -Path $chkdskStdout -Raw -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
if (Test-Path $chkdskStderr) {
|
||||||
|
$stderrText = Get-Content -Path $chkdskStderr -Raw -ErrorAction SilentlyContinue
|
||||||
|
if ($stderrText) {
|
||||||
|
$outputText += $stderrText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ScriptResult.system_optimization.chkdsk.run = $true
|
$ScriptResult.system_optimization.chkdsk.run = $true
|
||||||
$ScriptResult.system_optimization.chkdsk.exit_code = $ChkdskExitCode
|
$ScriptResult.system_optimization.chkdsk.exit_code = $ChkdskExitCode
|
||||||
|
|
||||||
|
# Parse output
|
||||||
if ($outputText -match "will be checked on next boot|Chkdsk cannot run because the volume is in use") {
|
if ($outputText -match "will be checked on next boot|Chkdsk cannot run because the volume is in use") {
|
||||||
$ScriptResult.system_optimization.chkdsk.reboot_required = $true
|
$ScriptResult.system_optimization.chkdsk.reboot_required = $true
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($ChkdskExitCode) {
|
# Parse disk space freed (if available in output)
|
||||||
0 { $ScriptResult.system_optimization.chkdsk.success = $true; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully." }
|
if ($outputText -match "(\d+) bytes in (\d+) data streams recovered") {
|
||||||
1 { $ScriptResult.system_optimization.chkdsk.success = $true; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully. Errors corrected." }
|
$bytesRecovered = [int64]$matches[1]
|
||||||
2 { $ScriptResult.system_optimization.chkdsk.success = $false; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK did not run due to a parameter error." }
|
$ScriptResult.system_optimization.chkdsk.diskSpace = "{0:N2} MB" -f ($bytesRecovered / 1MB)
|
||||||
3 { $ScriptResult.system_optimization.chkdsk.success = $true; $ScriptResult.system_optimization.chkdsk.reboot_required = $true; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with errors and requires a reboot." }
|
|
||||||
4 { $ScriptResult.system_optimization.chkdsk.success = $false; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK encountered errors but could not fix them." }
|
|
||||||
5 { $ScriptResult.system_optimization.chkdsk.success = $false; $ScriptResult.system_optimization.chkdsk.reboot_required = $true; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK found errors but requires a reboot." }
|
|
||||||
default { $ScriptResult.system_optimization.chkdsk.success = $false; $ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with exit code: $ChkdskExitCode" }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Parse exit codes
|
||||||
|
switch ($ChkdskExitCode) {
|
||||||
|
0 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $true
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully. No errors found."
|
||||||
|
}
|
||||||
|
1 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $true
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed successfully. Errors corrected."
|
||||||
|
}
|
||||||
|
2 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $false
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK did not run due to a parameter error."
|
||||||
|
}
|
||||||
|
3 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $true
|
||||||
|
$ScriptResult.system_optimization.chkdsk.reboot_required = $true
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with errors and requires a reboot to complete."
|
||||||
|
}
|
||||||
|
4 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $false
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK encountered errors but could not fix them."
|
||||||
|
}
|
||||||
|
5 {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $false
|
||||||
|
$ScriptResult.system_optimization.chkdsk.reboot_required = $true
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK found errors but requires a reboot to fix them."
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
$ScriptResult.system_optimization.chkdsk.success = $false
|
||||||
|
$ScriptResult.system_optimization.chkdsk.message = "CHKDSK completed with exit code: $ChkdskExitCode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host $outputText
|
||||||
Write-Host "CHKDSK exit code: $ChkdskExitCode"
|
Write-Host "CHKDSK exit code: $ChkdskExitCode"
|
||||||
|
Write-Host "CHKDSK message: $($ScriptResult.system_optimization.chkdsk.message)"
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run CHKDSK: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run CHKDSK: $($_.Exception.Message)"
|
||||||
|
|
@ -146,29 +118,68 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run SFC
|
# Run SFC
|
||||||
Write-Host "=========================================="
|
|
||||||
Write-Host "Running System File Checker (SFC /scannow)..."
|
Write-Host "Running System File Checker (SFC /scannow)..."
|
||||||
Write-Host "Note: A new window will open for SFC"
|
|
||||||
Write-Host "=========================================="
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = Start-ProcessWithNewWindow -FilePath "sfc" -Arguments "/scannow" -Name "sfc"
|
$process = Start-Process -FilePath "sfc" -ArgumentList "/scannow" -NoNewWindow -Wait -PassThru -RedirectStandardOutput $sfcStdout -RedirectStandardError $sfcStderr -ErrorAction Stop
|
||||||
$ExitCode = $result.ExitCode
|
$ExitCode = $process.ExitCode
|
||||||
$outputText = $result.Output
|
|
||||||
|
# Read output
|
||||||
|
$outputText = ""
|
||||||
|
if (Test-Path $sfcStdout) {
|
||||||
|
$outputText = Get-Content -Path $sfcStdout -Raw -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
if (Test-Path $sfcStderr) {
|
||||||
|
$stderrText = Get-Content -Path $sfcStderr -Raw -ErrorAction SilentlyContinue
|
||||||
|
if ($stderrText) {
|
||||||
|
$outputText += $stderrText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ScriptResult.system_optimization.sfc.run = $true
|
$ScriptResult.system_optimization.sfc.run = $true
|
||||||
$ScriptResult.system_optimization.sfc.exit_code = $ExitCode
|
$ScriptResult.system_optimization.sfc.exit_code = $ExitCode
|
||||||
|
|
||||||
switch ($ExitCode) {
|
# Parse files repaired from output
|
||||||
0 { $ScriptResult.system_optimization.sfc.success = $true; $ScriptResult.system_optimization.sfc.message = "SFC completed successfully."; $ScriptResult.system_optimization.sfc.files_repaired = 0 }
|
if ($outputText -match "Windows Resource Protection found integrity violations|found corrupt files and repaired them") {
|
||||||
1 { $ScriptResult.system_optimization.sfc.success = $true; $ScriptResult.system_optimization.sfc.message = "SFC completed successfully. Corrupted files were repaired."; $ScriptResult.system_optimization.sfc.files_repaired = 1 }
|
if ($outputText -match "repairing corrupted files") {
|
||||||
2 { $ScriptResult.system_optimization.sfc.success = $false; $ScriptResult.system_optimization.sfc.message = "SFC could not perform the operation." }
|
$ScriptResult.system_optimization.sfc.files_repaired = 1
|
||||||
3 { $ScriptResult.system_optimization.sfc.success = $false; $ScriptResult.system_optimization.sfc.message = "SFC could not fix some files."; $ScriptResult.system_optimization.sfc.files_repaired = -1 }
|
}
|
||||||
-1 { $ScriptResult.system_optimization.sfc.success = $false; $ScriptResult.system_optimization.sfc.message = "SFC encountered an error." }
|
|
||||||
default { $ScriptResult.system_optimization.sfc.success = $false; $ScriptResult.system_optimization.sfc.message = "SFC completed with exit code: $ExitCode" }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Parse exit codes
|
||||||
|
switch ($ExitCode) {
|
||||||
|
0 {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $true
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC completed successfully. No integrity violations found."
|
||||||
|
$ScriptResult.system_optimization.sfc.files_repaired = 0
|
||||||
|
}
|
||||||
|
1 {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $true
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC completed successfully. Corrupted files were repaired."
|
||||||
|
$ScriptResult.system_optimization.sfc.files_repaired = 1
|
||||||
|
}
|
||||||
|
2 {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $false
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC could not perform the operation. User cancelled or Windows is in safe mode."
|
||||||
|
}
|
||||||
|
3 {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $false
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC could not fix some files. See CBS.log for details."
|
||||||
|
$ScriptResult.system_optimization.sfc.files_repaired = -1
|
||||||
|
}
|
||||||
|
-1 {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $false
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC encountered an error. Check CBS.log for details."
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
$ScriptResult.system_optimization.sfc.success = $false
|
||||||
|
$ScriptResult.system_optimization.sfc.message = "SFC completed with unexpected exit code: $ExitCode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host $outputText
|
||||||
Write-Host "SFC exit code: $ExitCode"
|
Write-Host "SFC exit code: $ExitCode"
|
||||||
|
Write-Host "SFC message: $($ScriptResult.system_optimization.sfc.message)"
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run SFC: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run SFC: $($_.Exception.Message)"
|
||||||
|
|
@ -177,35 +188,65 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run DISM
|
# Run DISM
|
||||||
Write-Host "=========================================="
|
|
||||||
Write-Host "Running DISM /Online /Cleanup-Image /RestoreHealth..."
|
Write-Host "Running DISM /Online /Cleanup-Image /RestoreHealth..."
|
||||||
Write-Host "Note: A new window will open for DISM"
|
|
||||||
Write-Host "=========================================="
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = Start-ProcessWithNewWindow -FilePath "DISM" -Arguments "/Online /Cleanup-Image /RestoreHealth" -Name "dism"
|
$process = Start-Process -FilePath "DISM" -ArgumentList "/Online /Cleanup-Image /RestoreHealth" -NoNewWindow -Wait -PassThru -RedirectStandardOutput $dismStdout -RedirectStandardError $dismStderr -ErrorAction Stop
|
||||||
$ExitCode = $result.ExitCode
|
$ExitCode = $process.ExitCode
|
||||||
$outputText = $result.Output
|
|
||||||
|
# Read output
|
||||||
|
$outputText = ""
|
||||||
|
if (Test-Path $dismStdout) {
|
||||||
|
$outputText = Get-Content -Path $dismStdout -Raw -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
if (Test-Path $dismStderr) {
|
||||||
|
$stderrText = Get-Content -Path $dismStderr -Raw -ErrorAction SilentlyContinue
|
||||||
|
if ($stderrText) {
|
||||||
|
$outputText += $stderrText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ScriptResult.system_optimization.dism.run = $true
|
$ScriptResult.system_optimization.dism.run = $true
|
||||||
$ScriptResult.system_optimization.dism.exit_code = $ExitCode
|
$ScriptResult.system_optimization.dism.exit_code = $ExitCode
|
||||||
|
|
||||||
|
# Parse exit codes
|
||||||
switch ($ExitCode) {
|
switch ($ExitCode) {
|
||||||
0 { $ScriptResult.system_optimization.dism.success = $true; $ScriptResult.system_optimization.dism.component_repaired = $true; $ScriptResult.system_optimization.dism.message = "DISM completed successfully." }
|
0 {
|
||||||
87 { $ScriptResult.system_optimization.dism.success = $false; $ScriptResult.system_optimization.dism.message = "DISM failed. A parameter was invalid." }
|
$ScriptResult.system_optimization.dism.success = $true
|
||||||
3010 { $ScriptResult.system_optimization.dism.success = $true; $ScriptResult.system_optimization.dism.component_repaired = $true; $ScriptResult.system_optimization.dism.message = "DISM completed successfully. A reboot is required." }
|
$ScriptResult.system_optimization.dism.component_repaired = $true
|
||||||
|
$ScriptResult.system_optimization.dism.message = "DISM completed successfully. The component store was repaired."
|
||||||
|
}
|
||||||
|
87 {
|
||||||
|
$ScriptResult.system_optimization.dism.success = $false
|
||||||
|
$ScriptResult.system_optimization.dism.message = "DISM failed. A parameter was invalid. Check the command syntax."
|
||||||
|
}
|
||||||
|
3010 {
|
||||||
|
$ScriptResult.system_optimization.dism.success = $true
|
||||||
|
$ScriptResult.system_optimization.dism.component_repaired = $true
|
||||||
|
$ScriptResult.system_optimization.dism.message = "DISM completed successfully. A reboot is required."
|
||||||
|
}
|
||||||
|
1726 {
|
||||||
|
$ScriptResult.system_optimization.dism.success = $false
|
||||||
|
$ScriptResult.system_optimization.dism.message = "DISM failed. The remote procedure call failed."
|
||||||
|
}
|
||||||
|
1910 {
|
||||||
|
$ScriptResult.system_optimization.dism.success = $false
|
||||||
|
$ScriptResult.system_optimization.dism.message = "DISM failed. The specified image file could not be found."
|
||||||
|
}
|
||||||
default {
|
default {
|
||||||
if ($ExitCode -ge 0 -and $ExitCode -le 100) {
|
if ($ExitCode -ge 0 -and $ExitCode -le 100) {
|
||||||
$ScriptResult.system_optimization.dism.success = $true
|
$ScriptResult.system_optimization.dism.success = $true
|
||||||
$ScriptResult.system_optimization.dism.message = "DISM completed with exit code: $ExitCode"
|
$ScriptResult.system_optimization.dism.message = "DISM completed with exit code: $ExitCode"
|
||||||
} else {
|
} else {
|
||||||
$ScriptResult.system_optimization.dism.success = $false
|
$ScriptResult.system_optimization.dism.success = $false
|
||||||
$ScriptResult.system_optimization.dism.message = "DISM completed with exit code: $ExitCode"
|
$ScriptResult.system_optimization.dism.message = "DISM completed with unexpected exit code: $ExitCode"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Host $outputText
|
||||||
Write-Host "DISM exit code: $ExitCode"
|
Write-Host "DISM exit code: $ExitCode"
|
||||||
|
Write-Host "DISM message: $($ScriptResult.system_optimization.dism.message)"
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
$ErrorMsg = "Failed to run DISM: $($_.Exception.Message)"
|
$ErrorMsg = "Failed to run DISM: $($_.Exception.Message)"
|
||||||
|
|
@ -213,9 +254,16 @@ try {
|
||||||
Write-Host $ErrorMsg
|
Write-Host $ErrorMsg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Cleanup temp files
|
||||||
|
Write-Host "Cleaning up temporary files..."
|
||||||
|
$tempFiles = @($chkdskStdout, $chkdskStderr, $sfcStdout, $sfcStderr, $dismStdout, $dismStderr)
|
||||||
|
foreach ($file in $tempFiles) {
|
||||||
|
if (Test-Path $file) {
|
||||||
|
Remove-Item $file -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Output JSON result
|
# Output JSON result
|
||||||
Write-Host "=========================================="
|
|
||||||
Write-Host "System optimization section completed."
|
Write-Host "System optimization section completed."
|
||||||
Write-Host "=========================================="
|
|
||||||
$result = $ScriptResult | ConvertTo-Json -Compress -Depth 10
|
$result = $ScriptResult | ConvertTo-Json -Compress -Depth 10
|
||||||
Write-Output $result
|
Write-Output $result
|
||||||
Loading…
Add table
Add a link
Reference in a new issue