Я ще не спробував це, але якщо ви хочете спробувати це. Збережіть як PowerShell та його, щоб зберегти спеціальні папки користувачів. Я не мав кругообігу, щоб відновити його, але це не потрібно багато зробити в ці дні ..
Вибачення я вкладаю в неправильний сценарій .. це повинно бути простіше
Система add -type -AssemblyName.windows.forms
Система додаткових типів
$ global: backuppath = “”
$ form = new-Object System.windows.forms.form
$ form.text = “багатофункціональна утиліта”
$ form.Size = New-Object System.Drawing.Size (400, 260)
$ form.startposition = “Центр екрану”
$ btnsavespecialfolders = new-object system.windows.forms.button
$ btnsavespecialfolders.text = “Зберегти спеціальні папки”
$ btnsavespecialfolders.size = new-Object System.Drawing.Size (150, 30)
$ btnsavespecialfolders.location = New-Object System.Drawing.point (20, 20)
$ btnsavespecialfolders.add_click ({{{
# Перевірте наявність доданих USB -пристроїв (знімні накопичувачі: Drivetype = 2)
$ usbdrives = get -wmiobject -class win32_logicaldisk -filter “drivetype = 2” | Вибір-об'єкт DeviceId
if ($ usbdrives -and $ usbdrives.count -gt 0) {
$ результат = [System.Windows.Forms.MessageBox]:: шоу (
“USB -пристрій виявлений. Ви хочете зберегти свої спеціальні папки?”,
“USB виявив”,
[System.Windows.Forms.MessageBoxButtons]:: такне,
[System.Windows.Forms.MessageBoxIcon]:: Питання
)
якщо ($ result -eq [System.Windows.Forms.DialogResult]:: так) {
# Якщо існує кілька накопичувачів USB, виберіть перший.
$ chosendrive = ($ usbdrives | select -object -hirest 1) .deviceid
# Попросіть користувача імені папки
$ foldername = [System.Windows.Forms.Interaction]:: InputBox (“Введіть ім'я папки, щоб створити на USB -накопичувачі ($ Chosendrive):”, “Ім'я папки”, “Резервна копіювання”)
якщо ([string]:: isnullorwhitespace ($ foldername)) {
[System.Windows.Forms.MessageBox]:: Показати (“Ім'я папки не може бути порожнім”, “помилка”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: помилка)
повернення
}
$ targetPath = “$ chosendrive $ foldername”
if (-not (тестовий шлях $ targetPath)) {
New -item -path $ targetPath -Itemtype Directory | Витончений
}
}
інакше {
# Якщо користувач вирішить не використовувати USB, підказайте локальну папку
$ popperdialog = new-об'єктна система.windows.forms.folderbrowserdialog
$ poperdialog.description = “Виберіть локальну папку, щоб зберегти спеціальні папки.”
if ($ folderdialog.showdialog () -eq [System.Windows.Forms.DialogResult]:: добре) {
$ targetPath = $ folderdialog.selectedpath
}
інакше {
повернення
}
}
}
інакше {
# Не виявлено пристрою USB – підказка для локальної папки
$ popperdialog = new-об'єктна система.windows.forms.folderbrowserdialog
$ poperdialog.description = “Не виявлено пристрою USB. Виберіть локальну папку, щоб зберегти спеціальні папки”.
if ($ folderdialog.showdialog () -eq [System.Windows.Forms.DialogResult]:: добре) {
$ targetPath = $ folderdialog.selectedpath
}
інакше {
повернення
}
}
# Save the destination path globally
$global:backupPath = $targetPath
# Define a list of “special folders” to copy
$folders = @(
[Environment]::GetFolderPath("Desktop"),
[Environment]::GetFolderPath("MyDocuments"),
"$env:USERPROFILE\Downloads", # Downloads folder (hardcoded)
[Environment]::GetFolderPath("MyPictures"),
[Environment]::GetFolderPath("MyMusic"),
[Environment]::GetFolderPath("MyVideos")
)
# Copy each folder (if it exists) to the chosen backup folder
foreach ($folder in $folders) {
if (Test-Path $folder) {
$folderName = Split-Path $folder -Leaf
$destination = Join-Path -Path $targetPath -ChildPath $folderName
try {
Copy-Item -Path $folder -Destination $destination -Recurse -Force
}
catch {
[System.Windows.Forms.MessageBox]::Show("Failed to copy $folder. Error: $_", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
}
}
}
# Check the default browser and copy its default folder if it is Chrome or Opera
try {
$defaultProgId = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" -Name ProgId -ErrorAction Stop).ProgId
}
catch {
$defaultProgId = ""
}
if ($defaultProgId -match "Chrome") {
$browserPath = "$env:LOCALAPPDATA\Google\Chrome\User Data"
}
elseif ($defaultProgId -match "Opera") {
$browserPath = "$env:APPDATA\Opera Software\Opera Stable"
}
else {
$browserPath = $null
}
if ($browserPath -and (Test-Path $browserPath)) {
# Create a subfolder called "Browser" under the backup location
$destinationBrowser = Join-Path -Path $global:backupPath -ChildPath "Browser"
if (-not (Test-Path $destinationBrowser)) {
New-Item -Path $destinationBrowser -ItemType Directory | Out-Null
}
try {
Copy-Item -Path $browserPath -Destination $destinationBrowser -Recurse -Force
[System.Windows.Forms.MessageBox]::Show("Browser data from '$defaultProgId' saved to: $destinationBrowser", "Success", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
}
catch {
[System.Windows.Forms.MessageBox]::Show("Failed to copy browser data. Error: $_", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
}
}
else {
[System.Windows.Forms.MessageBox]::Show("Default browser is not Chrome or Opera, or the folder could not be found.", "Information", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
}
[System.Windows.Forms.MessageBox]::Show("Special folders saved to: $targetPath", "Success", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
})
$ btnwallpaper = new-object system.windows.forms.button
$ btnwallpaper.text = “шпалери”
$ btnwallpaper.size = New-Object System.Drawing.Size (150, 30)
$ btnwallpaper.Location = New-Object System.Drawing.point (200, 20)
$ btnwallpaper.add_click ({{
if (-not $ global: backuppath) {
[System.Windows.Forms.MessageBox]:: Показати (“Будь ласка, запустіть” Зберегти спеціальні папки “, щоб вибрати резервну копію призначення”, “попередження”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]::УВАГА)
повернення
}
# Отримайте поточний шлях шпалер з реєстру
$ шпалери = (get -itemproperty -path “hkcu: \ панель управління \ робочий стіл” -name шпалери). Wallpaper
if (тест-шлях $ шпалери) {
$ шпалерифіленм = розділений -шлях $ шпалери -leaf
$ destrent = приєднання -path -path $ global: backuppath -childpath $ шпалери
спробуйте {
Копію -item -path $ шпалери -Destination $ destination -force
[System.Windows.Forms.MessageBox]:: Шоу (“Шпалери зберігаються до: $ Destination”, “Успіх”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: інформація)
}
ловити {
[System.Windows.Forms.MessageBox]:: Показати (“Не вдалося скопіювати шпалери. Помилка: $ _”, “помилка”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: помилка)
}
}
інакше {
[System.Windows.Forms.MessageBox]:: Показати (“Файл шпалер не знайдено”, “Помилка”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: помилка)
}
})
$ btncolour = New-Object System.windows.forms.button
$ btncolour.text = “колір”
$ btncolour.size = New-Object System.Drawing.Size (150, 30)
$ btncolour.location = New-Object System.Drawing.point (20, 70)
$ btncolour.add_click ({{
спробуйте {
# Визначте пастельний колір райдужної оболонки.
# Приклад argb значення: 0xffb7a0ce (alpha = ff, red = b7, green = a0, blue = ce).
$ irispatel = 0xffb7a0ce.
Set -itemproperty -path “hkcu: \ software \ microsoft \ windows \ dwm” -name “clorizationcolor” -value $ irispastel
# Негайно застосувати новий акцент, перезапустіть провідник.
STOP -Process -name Explorer -force
Провідник старту-Процеси
[System.Windows.Forms.MessageBox]:: шоу (“Акцентний колір, встановлений на пастел Iris”, “Успіх”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: інформація)
}
ловити {
[System.Windows.Forms.MessageBox]:: Показати (“Не вдалося встановити колір акценту. Помилка: $ _”, “помилка”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: помилка)
}
})
$ btnfolderoptions = new-Object System.windows.forms.button
$ btnfolderoptions.text = “Параметри папки”
$ btnfolderoptions.size = New-Object System.Drawing.Size (150, 30)
$ btnfolderoptions.location = New-Object System.Drawing.point (200, 70)
$ btnfolderoptions.add_click ({{
спробуйте {
# Встановіть провідник файлів, щоб відкрити на “Цей ПК”
Set -itemproperty -path “hkcu: \ software \ microsoft \ windows \ currentversion \ explorer \ advanced” -name “launchto” -value 1 -type dword
# Спроба встановити перегляд папки за замовчуванням у список.
# (Цей метод реєстру може не працювати на кожній установці Windows 11)
New -item -Path “HKCU: \ Software \ Microsoft \ Windows \ Shell \ Bags \ Allfolders \ Shellfolder” -force | Витончений
Set -itemproperty -path “hkcu: \ software \ microsoft \ windows \ shell \ bags \ allfolders \ shellfolder” -name “mode” -value 3 -type dword
# Перезавантажте провідник для застосування змін.
STOP -Process -name Explorer -force
Провідник старту-Процеси
[System.Windows.Forms.MessageBox]:: Показати (“Параметри папок Набір: Провідник файлу відкриється на” цей ПК “з перегляду списку”, “Успіх”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: інформація)
}
ловити {
[System.Windows.Forms.MessageBox]:: Показати (“Не вдалося встановити параметри папки. Помилка: $ _”, “Помилка”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: помилка)
}
})
$ btnempty = new-Object System.windows.forms.button
$ btnempty.text = “Зробіть свій день”
$ btnempty.size = New-Object System.Drawing.Size (150, 30)
$ btnempty.Location = New-Object System.Drawing.point (20, 120)
$ btnempty.add_click ({{
[System.Windows.Forms.MessageBox]:: Показати (“Більше того дня і насолоджуйтесь”, “Повідомлення”, [System.Windows.Forms.MessageBoxButtons]:: добре, [System.Windows.Forms.MessageBoxIcon]:: інформація)
})
$ form.controls.add ($ btnsavespecialfolders)
$ form.controls.add ($ btnwallpaper)
$ form.controls.add ($ btncolour)
$ form.controls.add ($ btnfolderoptions)
$ form.controls.add ($ btnempty)