virjokk
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Сохранять в кодировке UTF-8, имя любое, расширение - bat, cmd Код: <# : @echo off cd /d "%~dp0" powershell.exe -nol -nop -ex bypass -c "&{[ScriptBlock]::Create((gc -lit '%~f0' -enc UTF8) -join [Char]10).Invoke(@(&{$args}%*))}" exit /b #> # Запускатель с функцией обновления и очистки браузера Ungoogled Chromium (сборка от Macchrome). # Без параметров: с заданным интервалом проверяет обновления, если есть - устанавливает/обновляет браузер, # выдавая уведомление в трее, затем запускает Ungoogled. Создает ярлык на рабочем столе (если его еще нет) с запуском без параметров. # После закрытия окна браузера удаляются временные папки и ключи реестра, указанные в соответствующих переменных. # Параметры можно указывать при старте батника в командной строке консоли Windows (напр., chrome.bat -onlyrun), # либо в ярлыке на рабочем столе. Чтобы в Windows 10 запустить консоль в папке батника нужно открыть эту папку в проводнике, # установить курсор в адресную строку, вместо адреса ввести на клавиатуре команду «CMD» и нажать на клавишу «Enter». # Для правильной работы достаточно поместить батник в любую пустую папку (кроме корневых, системных и с ограниченным доступом) # и запустить.При первом старте в эту папку скачивается последняя версия Ungoogled, создается ярлык на рабстоле и запускается браузер # с набором ключей, обеспечивающим в том числе портативную работу. В дальнейшем про батник можно не вспоминать и запускать браузер # только с ярлыка. Обновления скачиваются во временную подпапку в той же папке, где расположен батник, и после их установки # временная подпапка удаляется. Никуда больше батник в системе не лезет. Учитывается специфика сборки от Macchrome: иногда # он выпускает несколько сборок одной и той же версии Ungoogled, соответственно, будет скачиваться каждая новая сборка. # Сам батник - это гибрид Powershell/CMD, то есть его основная часть является сценарием на PowerShell, а несколько первых строк # на CMD нужны только для старта этого сценария. В современных Windows скрипты PS можно запускать и напрямую, но для этого # нужно предварительно дать разрешение на исполнение неподписанных сценариев, а также либо зарегистрировать файловую ассоциацию на # скрипты PS, либо из командной строки запускать PS с аргументами, что хлопотно и вряд ли будет делаться пользователями. # Идея этого батника и принцип работы позаимствованы у Insorg с его крутейшей "быстрой настройкой Chrome браузеров по методу трёх батников". # Здесь то, что делает несколько батников от Insorg, объединено в один. Кроме того, у Insorg все сделано на "чистом" CMD. # Содержимое батника может быть легко изменено обладателями минимальных познаний в PowerShell, который не является языком # программирования и очень прост в освоении. # Параметры: # -onlyrun - не проверять обновления, сразу запуск браузера; # -onlycheck - наоборот, не запускать браузер, только проверить обновления независимо от установленного интервала; # -nolnk - не создавать ярлык на рабочем столе; # -ask - перед обновлением - спрашивать. # Интервал проверки обновлений (количество дней) задается в переменной $CheckInterval, по умолчанию - 3, # если поставить 0, будет проверять при каждом запуске. # Имя папки профиля - в переменной $userdatadir, по умолчанию - User Data. # Список ключей запуска хрома - $argslist, файлы и папки, удаляемые после закрытия браузера - $udclean, $uddclean, # ветки реестра - $regclean. Ключи, удаляемые папки и ветки реестра обязательно просмотрите и удалите лишнее или добавьте свое. # Временно отключить ключ запуска или удаляемый файл/папку можно просто закомментировав соответствующиую строку символом #. # Каждая запись добавляется отдельной строкой в двойных кавычках. В $udclean указывается содержимое (только имена, без путей) # папки User Data, в $uddclean - User Data\Default, в $regclean - HKEY_CURRENT_USER\SOFTWARE. # Сам дистр ставится как есть, "лишние" файлы не удаляются: chrome_pwa_launcher.exe,notification_helper.exe остаются на месте. # В создаваемом ярлыке запуск батника происходит через PowerShell, чтобы скрыть окно консоли cmd. # Добавить параметр в ярлык можно, отредактировав в свойствах ярлыка путь: # C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -Command cmd /c 'C:\progr\ungoogled\chrome.cmd' -onlyrun # Путь к батнику обязательно в одинарных кавычках. $CheckInterval = 0 $userdatadir = "User Data" $argslist = @( "--user-data-dir=`"$userdatadir`"" "--disable-machine-id" "--disable-encryption" "--no-default-browser-check" "--disable-gpu-shader-disk-cache" "--disk-cache-dir=nul" "--disk-cache-size=1" "--disable-search-engine-collection" "--disable-sharing-hub" "--hide-sidepanel-button" "--remove-tabsearch-button" "--remove-grab-handle" "--scroll-tabs=always" "--popups-to-tabs" "--close-window-with-last-tab=never" "--show-avatar-button=never" "--tab-hover-cards=tooltip" "--extension-mime-request-handling=always-prompt-for-install" "--enable-features=#enable-parallel-downloading" "--force-punycode-hostnames" ) $udclean = @( "BrowserMetrics" "Crowd Deny" "GrShaderCache" "MEIPreload" "ShaderCache" "SSLErrorAssistant" "ZxcvbnData" "BrowserMetrics-spare.pma" "chrome_shutdown_ms.txt" "Module Info Cache" ) $uddclean = @( "BudgetDatabase" "Cache" "Code Cache" "commerce_subscription_db" "coupon_db" "DawnCache" "GPUCache" "optimization_guide_hint_cache_store" "optimization_guide_model_metadata_store" "shared_proto_db" "Service Worker" ) $regclean = @( "Chromium" ) $lastcheck = "14012024" $macbuild = "1" $batfilename = $MyInvocation.Line -match "\'(\w:\\.+)\'" | %{$matches[1]} $batfilepath = Split-path "$batfilename" if ($batfilepath -match "\w:\\$") {write-host "$batfilepath is root" -foregroundcolor red; return} $onlyrun = $args -match "^([/-]|--)?onlyrun$" $onlycheck = $args -match "^([/-]|--)?onlycheck$" $nolnk = $args -match "^([/-]|--)?lnk$" $ask = $args -match "^([/-]|--)?ask$" [Net.ServicePointManager]::SecurityProtocol = 'ssl3,tls,tls11,tls12' Add-Type -AssemblyName System.Web Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing Function IconHandle { $iconBase64=@('iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAADlUlEQVR4nO2U+' '0tTYRzG979EEf1UBBbFtF21C0TShXJagVFkkd0oKCFkU1mmaYhlRqUeN2dNu7iZba3UMt0vao0uK7rQ1Wp2YddzeeI9skp33u247Lc' 'eeOBwfnk+3+f9vq9C8V9pSF97L0NlHC1ZZnzQWlTvHdlV18scutC5RvEvpTLfL1h2+O1rZWFEUG4SIOXlOzkUlL+LHDjfXTZjweraf' 'mXmvrFxZZ50qJQzDQI2HvvCHTpnN/xduNF3QrmFkx081bptPIobBu6kFa4qfeRQGtIL/tNZ+QJ21Y8+n164cfTkdCpPCWEQUNx41yM' 'vvM69RLk1/dpp1hTyOGK7uiElgLbl7sOle9kZByDeWBpgk4dbLBo18x3KmjAWb5duQb1ZQM1FAT4/EI4CMQ54EwCco4DpGlB6ZbJNX' 'QIqbvI4fodF1UAM5T0X9lABdNZbvWomCOKM3TEs3jEZIrdIgP8VEIkB14cBs2PCXSMT/z58A2o9AipcHCp7WVQPRnFyaLJNLu84FUD' 'T6g/HAVSNISxYy/+CIJOT8BefgLzTgNY82YYzwMvPwFhQwClvYnDcZX1fIRm+3G6ZEw+Pe0lJDPNXC1i0nRNrJ1NKhf8JEWEBz0uOC' 'lBNWug+o0qc3mbbMBVA3RzEwnxOhPC9EMTaaeFxO0aA9z8EKoDYwo2mygSA7LaOkgQAJojM6ogIEAwDx52pASqdQIxHCoBOl8QCdh6' 'VAhAXsoidFkCUSwVg75EAaF9HA8g6G8IDP2buCLqbzAkAKxlmNg2AuMrJiUtIFo0Wnt8wsYTXH6exhETa1qchGkC2JQh/gBevmhQEC' 'X/1GXg2BlTdTzJ9/7j0NSTSWd23k7WwviMkQpApSdVkJ4jJN/n37CNwsItNWr/JNRRQ0KS/ZFWpmW9UAGK9JYhabxS+TzxCLET7Pgg' '45QJW1fFixdT6B6MwO87vpgIQ6ax9I8kApKyt5sVjKO6KJZ/e4wsqUinH1jxPzbzjZQM0h8TwVfX0xSM23wujoqchWyFH+jb7NjXzV' 'RaApjEiAhxx0ac/MRhBmbPtoqzwuPTWa1VyIDR1LHLPscnDbzq8inSktV4uTHUcuhoexl567dOefKr0l5i5Okv/sNTt0DSHkNfCSm6' '76ZYvJPvM5SjHZs/SWd0eDfPk12O1oimMyoHfweV94zC5vYGUV+1vlWOxzMpub8/df9XeUtbT4SZvO/V5/S9Fcv0EOC7m4RioxTcAA' 'AAASUVORK5CYII=') -join '' $iconBytes = [Convert]::FromBase64String($iconBase64) [System.Drawing.Icon]::FromHandle( ([System.Drawing.Bitmap]::new( [System.IO.MemoryStream]::new($iconBytes, 0, $iconBytes.Length) ).GetHIcon()) ) } Function ShowBaloon ($message,$title="Ungoogled Chromium",$messagetype="Info") { $balloon = New-Object System.Windows.Forms.NotifyIcon $balloon.Icon = IconHandle $balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]$messagetype $balloon.BalloonTipText = $message $balloon.BalloonTipTitle = $title $balloon.Visible = $true $balloon.ShowBalloonTip(10000) } Function SetVar ($name,$value) { Get-Content -Path "$batfilename" | %{ $_ -replace "(?<=^\s*\x24$name\s*=\s*\x22)[^\x22]*","$value" } | Set-Content -Path "$($batfilename).tmp" Move-Item -Path "$($batfilename).tmp" -Destination "$batfilename" -Force } Function Check { try {$offsite = Invoke-RestMethod -Uri "https://api.github.com/repos/macchrome/winchrome/releases/latest"} catch {ShowBaloon -Message "Page is unavailable" -MessageType "Error"; return} $Script:latest = $offsite.assets.browser_download_url | ?{ $_ -match ".+ungoogled-chromium-([\d\.]+-\d+)_Win64\.7z" } | Select -Last 1 | %{$Script:distrlink = $matches[0]; $matches[1]} if (-not $latest) {ShowBaloon -Message "Error parsing version" -MessageType "Error"; return} SetVar -name "lastcheck" -value "$(Get-Date -Format 'ddMMyyyy')" $current = (Get-Item -Path "$batfilepath\chrome.exe" -ea 0).VersionInfo.ProductVersion if ([version]$latest.split('-')[0] -le [version]$current) { if ([int]$latest.split('-')[1] -le [int]$macbuild) {return} } if ($ask) { if ( [System.Windows.Forms.MessageBox]::Show("Ungoogled $latest is new version! Update?","Shooze action","YesNo","Question") -like 'Yes' ) { return $true } } else { ShowBaloon -Message "Ungoogled $latest is new version, start update..." return $true } } Function GetFile ($link,$name,$title) { $progressForm = New-Object System.Windows.Forms.Form $progressForm.Size = New-Object System.Drawing.Size(317,150) $progressForm.StartPosition = 'CenterScreen' $progressForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle $progressForm.BackColor = '#0B5162' $progressForm.TopMost = $True $progressForm.Text = "New: $Latest" $progressForm.Icon = IconHandle $progressBar = New-Object System.Windows.Forms.ProgressBar $progressBar.Location = New-Object System.Drawing.Point(10, 50) $progressBar.Size = New-Object System.Drawing.Size(280, 20) $progressForm.Controls.Add($progressBar) $progressLabel = New-Object System.Windows.Forms.Label $progressLabel.Location = New-Object System.Drawing.Point(10, 20) $progressLabel.Size = New-Object System.Drawing.Size(280, 20) $progressLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft $progressLabel.Font = new-object System.Drawing.Font('Ariel',9,[System.Drawing.FontStyle]::Bold) $progressLabel.ForeColor = '#D7E7F7' $progressForm.Controls.Add($progressLabel) $uri = New-Object "System.Uri" $link $request = [System.Net.HttpWebRequest]::Create($uri) $request.set_Timeout(15000) $response = $request.GetResponse() $responseContentLength = $response.get_ContentLength() $totalLength = $response.get_ContentLength() / 1MB $responseStream = $response.GetResponseStream() $targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList "$name", Create $buffer = new-object byte[] 10KB $count = $responseStream.Read($buffer,0,$buffer.length) $downloadedBytes = $count $progressForm.Show() while ($count -gt 0) { $targetStream.Write($buffer, 0, $count) $count = $responseStream.Read($buffer,0,$buffer.length) $downloadedBytes = $downloadedBytes + $count $progressBar.Value = (($downloadedBytes / 1MB) / $totalLength) * 100 $progressLabel.Text = "$($title): $('{0:N2} MB' -f ($downloadedBytes / 1MB)) of $('{0:N2} MB' -f ($totalLength))" $progressForm.Refresh() } $targetStream.Flush() $targetStream.Close() $targetStream.Dispose() $responseStream.Dispose() $progressForm.Close() } Function Update { if ((ps chrome -ea 0).Path -eq "$batfilepath\chrome.exe") { ShowBaloon -Message "Ungoogled is running" -MessageType "Error"; return } $Script:tmp = (New-Item -Path $("$batfilepath\"+"temp"+(get-random).tostring()) -ItemType Directory).FullName $distrname = $distrlink.split('/')[-1] try {GetFile -link "$distrlink" -name "$tmp\$distrname" -title "Chromium"} catch {ShowBaloon -Message "Error download file $distrname" -MessageType "Error"; return} try {GetFile -link "https://www.7-zip.org/a/7zr.exe" -name "$tmp\7zr.exe" -title "7-zip"} catch {ShowBaloon -Message "Error download 7zip" -MessageType "Error"; return} &$tmp\7zr.exe x "$tmp\$distrname" -xr!"*er.exe" -o"$tmp" -y if ($LASTEXITCODE -ne 0) {ShowBaloon -Message "Error unpack file $distrname" -MessageType "Error"; return} ShowBaloon -Message "Unpack and copy files, and start Ungoogled..." $nodel = "$userdatadir","$($tmp.split('\')[-1])","$($batfilename.split('\')[-1])" Get-Item -Path "$batfilepath\*" -Exclude $nodel -ea 0 | Remove-Item -Recurse -Force -ea 0 Copy-Item -Path "$tmp\ungoogl*\*" -Destination "$batfilepath" -Recurse -Force SetVar -name "macbuild" -value $latest.split('-')[1] if (-not [IO.Directory]::Exists("$batfilepath\$userdatadir")) { New-Item -Path "$batfilepath\$userdatadir" -ItemType Directory -Force | Out-Null @( '{"distribution":{"alternate_shortcut_text":false,"chrome_shortcut_icon_index":0,"create_all_shortcuts":true,' '"do_not_create_desktop_shortcut":true,"do_not_create_quick_launch_shortcut":true,"do_not_create_taskbar_shortcut":true,' '"do_not_launch_chrome":true,"do_not_register_for_update_launch":true,"import_bookmarks":false,"import_history":false,' '"import_home_page":false,"import_search_engine":false,"make_chrome_default":false,"make_chrome_default_for_user":false,' '"show_welcome_page":false,"skip_first_run_ui":true,"system_level":false,"verbose_logging":false},' '"first_run_tabs":[],"homepage":"chrome://chrome-urls","homepage_is_newtabpage":false,"safebrowsing":{"enabled":false},' '"session":{"restore_on_startup":1},"alternate_error_pages":{"enabled":false},"NewTabPage":{"DisabledModules":["dummy","dummy2"],' '"ModulesVisible":false},"account_id_migration_state":2,"autofill":{"credit_card_enabled":false,"enabled":false,' '"orphan_rows_removed":true,"profile_enabled":false},"bookmark_bar":{"show_apps_shortcut":false,"show_on_all_tabs":false,' '"show_only_on_ntp":true,"show_reading_list":false},"browser":{"show_home_button":true,"check_default_browser":false,' '"clear_data":{"browsing_history_basic":true,"cache_basic":true,"cookies_basic":true,"form_data":true,"hosted_apps_data":true,' '"media_licenses":true,"passwords":true,"preferences_migrated_to_basic":true,"site_settings":true,"time_period":4,' '"time_period_basic":4},"clear_lso_data_enabled":true,"has_seen_welcome_page":true,"last_clear_browsing_data_tab":1,' '"window_placement":{"bottom":720,"left":64,"maximized":true,"right":1200,"top":32}},"credentials_enable_autosignin":false,' '"credentials_enable_service":false,"default_apps_install_state":2,"download":{"directory_upgrade":true,"prompt_for_download":true},' '"enable_do_not_track":true,"extensions":{"alerts":{"initialized":true},"ui":{"developer_mode":true}},' '"media":{"engagement":{"schema_version":4}},"net":{"network_prediction_options":2},"omnibox":{"prevent_url_elisions":true},' '"payments":{"can_make_payment_enabled":false},"profile":{"avatar_index":24,"block_third_party_cookies":true,' '"content_settings":{"clear_on_exit_migrated":true,"pref_version":1},' '"default_content_setting_values":{"background_sync":2,"cookies":1},' '"exit_type":"Normal","exited_cleanly":true,"local_avatar_index":24,' '"managed_user_id":"","name":"","password_manager_enabled":false},"search":{"suggest_enabled":false}}' ) -join '' | Set-Content -Path "$batfilepath\master_preferences" @( '{"background_mode":{"enabled":false},"browser":{"enabled_labs_experiments":["ignore-gpu-blocklist","smooth-scrolling@2"]},' '"hardware_acceleration_mode_previous":true,"profile":{"last_used":"Default"}}' ) -join '' | Set-Content -Path "$batfilepath\$userdatadir\Local State" } } if (-not $onlyrun) { if ((ping -n 1 ya.ru) -match 'TTL=') { if ($onlycheck -or (New-TimeSpan -Start $([datetime]::parseexact($lastcheck, 'ddMMyyyy', $null))).Days -ge [int]$CheckInterval) { if (Check) {Update; Remove-Item -Path "$tmp" -Recurse -Force -ErrorAction SilentlyContinue} } } else { ShowBaloon -Message "No internet connection" -MessageType "Error" } } if (-not $nolnk) { if (-not [IO.File]::Exists("$env:USERPROFILE\Desktop\Ungoogled Chromium.lnk")) { $lnkpath = Get-Item -Path "$env:USERPROFILE\Desktop\*.lnk" | %{ (New-Object -COM WScript.Shell).CreateShortcut($_) } | ?{$_.TargetPath -like "*powershell.exe*" -and $_.Arguments -like "*$batfilename*"} if ([IO.File]::Exists("$batfilepath\chrome.exe") -and -not $lnkpath) { $shortcut = (New-Object -ComObject WScript.Shell).CreateShortcut("$env:USERPROFILE\Desktop\Ungoogled Chromium.lnk") $shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" $shortcut.IconLocation = "$batfilepath\chrome.exe, 0" $shortcut.WindowStyle = 7 $shortcut.Arguments = "-NoProfile -WindowStyle Hidden -Command cmd /c `'$batfilename`'" $shortcut.WorkingDirectory = "$batfilepath" $shortcut.Save() } } } if (-not $onlycheck) { if ([IO.File]::Exists("$batfilepath\chrome.exe")) { Start-Process -FilePath "$batfilepath\chrome.exe" -ArgumentList $argslist -WorkingDirectory "$batfilepath" -Wait Get-Item -Path "$batfilepath\$userdatadir\*","$batfilepath\$userdatadir\Default\*","HKCU:Software\*" -Include $($udclean+$uddclean+$regclean) | Remove-Item -Recurse -Force -ea 0 } else { ShowBaloon -Message "Missed chrome.exe, run this again for download" -MessageType "Error" SetVar -name "lastcheck" -value "01011970" } } |
| Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 15:56 13-09-2023 | Исправлено: virjokk, 19:45 14-01-2024 |
|