From e68bb803788b77ec936b08ab96a933f8b6b25f58 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:29:11 +0200 Subject: [PATCH 01/35] Initial deployment script --- .gitignore | 1 - LICENSE.md | 201 ------- Readme.md | 0 RegCli.psd1 | 26 - RegCli.psm1 | 318 ----------- Update.ps1 | 26 + build.ps1 | 291 ---------- dist.psm1 | 65 +++ en-US/RegCli-help.xml | 557 -------------------- en_us/Expand-ChromiumInstaller.md | 76 --- en_us/Get-ExecutableType.md | 69 --- en_us/RegCli.md | 31 -- en_us/Save-Installer.md | 61 --- en_us/Set-BatchRedirect.md | 73 --- en_us/Set-ChromiumShortcut.md | 58 -- en_us/Set-ChromiumVisualElementsManifest.md | 73 --- icon.png | Bin 12759 -> 0 bytes latest.json | 4 +- 18 files changed, 93 insertions(+), 1837 deletions(-) delete mode 100644 .gitignore delete mode 100644 LICENSE.md delete mode 100644 Readme.md delete mode 100644 RegCli.psd1 delete mode 100644 RegCli.psm1 create mode 100644 Update.ps1 delete mode 100644 build.ps1 create mode 100644 dist.psm1 delete mode 100644 en-US/RegCli-help.xml delete mode 100644 en_us/Expand-ChromiumInstaller.md delete mode 100644 en_us/Get-ExecutableType.md delete mode 100644 en_us/RegCli.md delete mode 100644 en_us/Save-Installer.md delete mode 100644 en_us/Set-BatchRedirect.md delete mode 100644 en_us/Set-ChromiumShortcut.md delete mode 100644 en_us/Set-ChromiumVisualElementsManifest.md delete mode 100644 icon.png diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4e8c966..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -7z.exe \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index f49a4e1..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/Readme.md b/Readme.md deleted file mode 100644 index e69de29..0000000 diff --git a/RegCli.psd1 b/RegCli.psd1 deleted file mode 100644 index b67ef9c..0000000 --- a/RegCli.psd1 +++ /dev/null @@ -1,26 +0,0 @@ -@{ -RootModule = 'RegCli.psm1' -ModuleVersion = '1.0.3' -GUID = '9d980765-e8a9-4dd6-b7b0-9142a7a6e704' -Author = 'Fabrice Sanga' -CompanyName = 'sangafabrice' -Copyright = '© 2022 SangaFabrice. All rights reserved.' -Description = 'Set of helper functions for updating applications.' -PowerShellVersion = '7.0' -PowerShellHostVersion = '7.0' -FunctionsToExport = 'Expand-ChromiumInstaller','Get-ExecutableType','Save-Installer', - 'Set-BatchRedirect','Set-ChromiumShortcut', - 'Set-ChromiumVisualElementsManifest' -CmdletsToExport = @() -AliasesToExport = @() -FileList = 'en-US\RegCli-help.xml','RegCli.psm1','RegCli.psd1' -PrivateData = @{ - PSData = @{ - Tags = 'Update','Chromium','RegCli' - LicenseUri = 'https://github.com/sangafabrice/reg-cli/blob/main/LICENSE.md' - ProjectUri = 'https://github.com/sangafabrice/reg-cli' - IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/5dd6cdfa8202fbd95eaa6fbf219f906a3b83d130/icon.png' - ReleaseNotes = 'Correct line continuation.' - } -} -} diff --git a/RegCli.psm1 b/RegCli.psm1 deleted file mode 100644 index 7dd03aa..0000000 --- a/RegCli.psm1 +++ /dev/null @@ -1,318 +0,0 @@ -#Requires -Version 7.0 -#Requires -RunAsAdministrator - -#Region RegCli class - -Enum MachineType { x64; x86 } - -Class RegCli { - # RegCli is not meant to be instantiated - # and only declares static functions - # It is a singleton - - Static [string] $AutorunDirectory = "$( - # Get the autorun directory - # where the autorun batch script is located - - (@{ - LiteralPath = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Command Processor').Autorun - ErrorAction = 'SilentlyContinue' - } | ForEach-Object { Get-Item @_ })?.Directory - )" - - Static [MachineType] $OSArchitecture = $( - # Get the OS architecture string - - If ([Environment]::Is64BitOperatingSystem) { [MachineType]::x64 } Else { [MachineType]::x86 } - ) - - Static [void] Get7Zip() { - # Download 7zip if it is absent - - "$PSScriptRoot\7z.exe".Where({ !(Test-Path $_) }) | - ForEach-Object { Start-BitsTransfer 'https://www.7-zip.org/a/7zr.exe' $_ } - } - - Static [void] ExpandInstaller($Path) { - [RegCli]::ExpandInstaller($Path, $Null) - } - - Static [void] ExpandInstaller($InstallerPath, $DestinationPath) { - # Extract files from a specified self-extracting executable - # installer $InstallerPath to $DestinationPath directory. - # Precondition : - # 1. $InstallerPath exists. - # 2. $DestinationPath may or may not exist and may be $null. - # 3. 7zip is installed. - - Get-Item -LiteralPath $InstallerPath | - ForEach-Object { - Invoke-Expression ". '$PSScriptRoot\7z.exe' x -aoa -o'$( - If ($Null -ne $DestinationPath) { $DestinationPath } - Else { "$($_.Directory)\$($_.BaseName)" } - )' '$($_.FullName)'" - } - } - - Static [void] ExpandChromiumInstaller([string] $InstallerPath, [string] $ExecutablePath) { - # Extracts files from a specified chromium installer $InstallerPath - # to the directory in which the application $ExecutablePath is located. - # Precondition : - # 1. $InstallerPath exists. - # 2. $ExecutablePath may or may not exist. - - $ExeName = $ExeBaseName = $ExeDir = $Null - ,@($ExecutablePath -split '\\') | - ForEach-Object { - $ExeName = $_[-1] - $ExeBaseName = & { - [void] ($ExeName -match '(?[^\\/]+)\.exe$') - $Matches.BaseName - } - $Count = $_.Count - $ExeDir = $(If ($Count -gt 1) { $_[0..($Count - 2)] -join '\' } Else { $PWD }) - Switch ($(Try { Get-Item -LiteralPath $InstallerPath } Catch { })) { - { $Null -ne $_ } { - [RegCli]::ExpandInstaller($_.FullName) - New-Item $ExeDir -ItemType Directory -ErrorAction SilentlyContinue - $ExeDir = (Get-Item -LiteralPath $ExeDir).FullName - $UnzipPath = "$($_.Directory)\$($_.BaseName)" - Try { - (Get-Item -LiteralPath $UnzipPath).FullName | - ForEach-Object { Push-Location $_ } - (Get-Item .\*.7z)[0].FullName | - ForEach-Object { - [RegCli]::ExpandInstaller($_) - Remove-Item $_ - } - Compress-Archive $ExeDir -DestinationPath "${Env:TEMP}\$($ExeBaseName)_$(Get-Date -Format 'yyMMddHHmm').zip" - Stop-Process -Name $($ExeBaseName) -Force -ErrorAction SilentlyContinue - Remove-Item "$ExeDir\*" -Recurse - Move-Item "$((Get-ChildItem $ExeName -Recurse).Directory)\*" $ExeDir - Pop-Location - Remove-Item $UnzipPath -Recurse - } Catch { } - } - } - } - } - - Static [void] SetChromiumVisualElementsManifest([string] $VisualElementsManifest, [string] $BackgroundColor) { - # Create the VisualElementManifest.xml in chromium app directory - - $InstallLocation = $VisualElementsManifest -replace ($VisualElementsManifest -split '\\')[-1] -replace '\\$' - $ErrorActionPreference = 'SilentlyContinue' - ,@(Get-ChildItem "$InstallLocation\*Logo.png" -Recurse) | - ForEach-Object { - $Pattern = "$InstallLocation\" -replace '\\','\\' - @{ - BigLogo = $_[0] -replace $Pattern - SmallLogo = $_[1] -replace $Pattern - } - } | - ForEach-Object { - Set-Content $VisualElementsManifest -Value @" - - - -"@ - } - } - - Static [void] SetChromiumShortcut([string] $ExecutablePath) { - # Create shortcut link to chromium app and save it to Start Menu - - (New-Object -ComObject 'WScript.Shell').CreateShortcut("${Env:ProgramData}\Microsoft\Windows\Start Menu\Programs\$( - (Get-Item -LiteralPath $ExecutablePath -ErrorAction SilentlyContinue).VersionInfo.FileDescription - ).lnk") | - ForEach-Object { - $_.TargetPath = $ExecutablePath - $_.Save() - } - } - - Static [string] DownloadInstaller([uri] $InstallerUrl) { - # Download resource and save it to %TEMP% directory - - Try { - $InstallerUrl.Segments[-1] -match '((?^.+)(?\.[^\.]+$))' - $Result = "${Env:TEMP}\$($Matches.BaseName)_$(Get-Date -Format 'yyMMddHHmm')$($Matches.Extension)" - Start-BitsTransfer -Source "$InstallerUrl" -Destination $Result - Return $Result - } - Catch { Return $Null } - } - - Static [MachineType] GetExeMachineType([string] $ExecutablePath) { - # Get the machine type of an application - - Switch ($(Try { (Get-Item -LiteralPath $ExecutablePath).FullName } Catch { })) { - { ![string]::IsNullOrEmpty($_) } { - $PEHeaderOffset = [Byte[]]::New(2) - $PESignature = [Byte[]]::New(4) - $MachineType = [Byte[]]::New(2) - $FileStream = [System.IO.FileStream]::New($_, 'Open', 'Read', 'ReadWrite') - $FileStream.Position = 0x3c - [void] $FileStream.Read($PEHeaderOffset, 0, 2) - $FileStream.Position = [System.BitConverter]::ToUInt16($PEHeaderOffset, 0) - [void] $FileStream.Read($PESignature, 0, 4) - [void] $FileStream.Read($MachineType, 0, 2) - $FileStream.Close() - Switch ([System.BitConverter]::ToUInt16($MachineType, 0)){ - 0x8664 { Return [MachineType]::x64 } - 0x14c { Return [MachineType]::x86 } - } - } - } - Return [RegCli]::OSArchitecture - } - - Static [void] SetBatchRedirect([string] $BatchName, [string] $ExecutablePath) { - # Create a batch redirect script in Autorun directory - - Try { - $ExeItem = Get-Item -LiteralPath $ExecutablePath -ErrorAction Stop - Set-Content "$( - Switch ([RegCli]::AutorunDirectory) { - { ![string]::IsNullOrEmpty($_) } { $_ } - Default { "$PWD" } - } - )\$BatchName.bat" -Value @" -@Echo OFF -If Not "%~1"=="--version" ( - If Not "%~1"=="-V" ( - Start "" /D "$($ExeItem.Directory)" "$($ExeItem.Name)" %* - GoTo :EOF - ) -) -For /F "Skip=1 Tokens=* Delims=." %%V In ('"WMIC DATAFILE WHERE Name="$($ExecutablePath -replace '\\','\\')" GET Version" 2^> Nul') Do ( - Echo %%V - GoTo :EOF -) -"@ - } - Catch { } - } -} -#EndRegion - -#Region Functions to be Exported - -# The module becomes a Facade of the singleton RegCli class -# Since the class cannot be exported with Import-Module -# Use to access the class - -Class ValidationUtility { - Static [bool] ValidateFileSystem($Path) { - Return (Get-Item -LiteralPath $Path).PSDrive.Name -iin @((Get-PSDrive -PSProvider FileSystem).Name) - } - - Static [bool] ValidatePathString($Path) { - $Pattern = '(?^.+):' - If ($Path -match $Pattern -or $PWD -match $Pattern) { - Return $Matches.Drive -iin @((Get-PSDrive -PSProvider FileSystem).Name) - } - Return $False - } - - Static [bool] ValidateSsl($Url) { Return $Url.Scheme -ieq 'https' } -} - -Function Expand-ChromiumInstaller { - [CmdletBinding(PositionalBinding=$True)] - [OutputType([System.Void])] - Param( - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidateFileSystem($_) })] - [string] $Path, - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidatePathString($_) })] - [string] $ApplicationPath - ) - [RegCli]::ExpandChromiumInstaller($Path, $ApplicationPath) -} - -Filter Get-ExecutableType { - [CmdletBinding()] - [OutputType([MachineType])] - Param( - [Parameter(Mandatory,ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidatePathString($_) })] - [string] $Path - ) - [RegCli]::GetExeMachineType($Path) -} - -Filter Save-Installer { - [CmdletBinding()] - [OutputType([String])] - Param( - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidateSsl($_) })] - [uri] $Url - ) - [RegCli]::DownloadInstaller($Url) -} - -Function Set-BatchRedirect { - [CmdletBinding(PositionalBinding=$True)] - [OutputType([System.Void])] - Param( - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [Alias('Name')] - [string] $BatchName, - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidateFileSystem($_) })] - [Alias('Path')] - [string] $ApplicationPath - ) - [RegCli]::SetBatchRedirect($BatchName, $ApplicationPath) -} - -Filter Set-ChromiumShortcut { - [CmdletBinding()] - [OutputType([System.Void])] - Param( - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidateFileSystem($_) })] - [string] $Path - ) - [RegCli]::SetChromiumShortcut($Path) -} - -Filter Set-ChromiumVisualElementsManifest { - [CmdletBinding(PositionalBinding=$True)] - [OutputType([System.Void])] - Param( - [Parameter(Mandatory, ValueFromPipelineByPropertyName)] - [ValidateNotNullOrEmpty()] - [ValidateScript({ [ValidationUtility]::ValidatePathString($_) })] - [string] $Path, - [AllowEmptyString()] - [AllowNull()] - [string] $BackgroundColor - ) - [RegCli]::SetChromiumVisualElementsManifest($Path, $BackgroundColor) -} - -#EndRegion - -#Region Module initialization tasks - -# Download 7zip if it is absent -[RegCli]::Get7Zip() - -#EndRegion \ No newline at end of file diff --git a/Update.ps1 b/Update.ps1 new file mode 100644 index 0000000..be09563 --- /dev/null +++ b/Update.ps1 @@ -0,0 +1,26 @@ +Param ( + [ValidateNotNullOrEmpty()] + [ValidateScript({ + (& { + Param($Path) + $Pattern = '(?^.+):' + If ($Path -match $Pattern -or $PWD -match $Pattern) { + Return $Matches.Drive -iin @((Get-PSDrive -PSProvider FileSystem).Name) + } + Return $False + } $_) -and + $( + @{ + LiteralPath = $_ + ErrorAction = 'SilentlyContinue' + } | ForEach-Object { Get-Item @_ } + ).FullName -ine $PSScriptRoot + })] [string] + $InstallLocation = "${Env:ProgramData}\ProgramName", + [ValidateNotNullOrEmpty()] + [ValidateScript({ + (Get-Item -LiteralPath $_).PSDrive.Name -iin + @((Get-PSDrive -PSProvider FileSystem).Name) + })] [string] + $SaveTo = $PSScriptRoot +) \ No newline at end of file diff --git a/build.ps1 b/build.ps1 deleted file mode 100644 index dc3d17e..0000000 --- a/build.ps1 +++ /dev/null @@ -1,291 +0,0 @@ -$DevDependencies = @{ - PlatyPS = '0.14.2' - RemoteRepo = (git ls-remote --get-url) -replace '\.git$' - Manifest = { Invoke-Expression "$(Get-Content "$PSScriptRoot\RegCli.psd1" -Raw)" } -} - -Filter New-RCManifest { - <# - .SYNOPSIS - Create module manifest - .NOTES - Precondition: - 1. latest.json exists - #> - - $GithubRepo = $DevDependencies.RemoteRepo - $ModuleName = 'RegCli' - Push-Location $PSScriptRoot - Get-Content .\latest.json -Raw | - ConvertFrom-Json | - ForEach-Object { - @{ - Path = "$ModuleName.psd1" - RootModule = "$ModuleName.psm1" - ModuleVersion = $_.version - GUID = '9d980765-e8a9-4dd6-b7b0-9142a7a6e704' - Author = 'Fabrice Sanga' - CompanyName = 'sangafabrice' - Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." - Description = 'Set of helper functions for updating applications.' - PowerShellVersion = '7.0' - PowerShellHostVersion = '7.0' - FunctionsToExport = @( - (Get-Content ".\$ModuleName.psm1").Where({ $_ -like 'Function*' -or $_ -like 'Filter*' }) | - ForEach-Object { ($_ -split ' ')[1] } - ) - CmdletsToExport = @() - VariablesToExport = @() - AliasesToExport = @() - FileList = @("en-US\$ModuleName-help.xml","$ModuleName.psm1","$ModuleName.psd1") - Tags = @('Update','Chromium','RegCli') - LicenseUri = "$GithubRepo/blob/main/LICENSE.md" - ProjectUri = $GithubRepo - IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/5dd6cdfa8202fbd95eaa6fbf219f906a3b83d130/icon.png' - ReleaseNotes = $_.releaseNotes -join "`n" - } - } | ForEach-Object { - New-ModuleManifest @_ - (Get-Content $_.Path | - Where-Object { $_ -match '.+' } | - Where-Object { $_ -notmatch '^\s*#\.*' }) -replace ' # End of .+' -replace ", '",",'" | - Out-File "$ModuleName.psd1" - } - Pop-Location -} - -Filter New-RCMerge { - <# - .SYNOPSIS - Merge module into main - .NOTES - Precondition: - 1. The current branch is main - 2. Module files are modified in main - 3. The module manifest is modified - #> - - Param($CommitMessage) - - Push-Location $PSScriptRoot - Try { - If ((git branch --show-current) -ne 'main') { Throw 'BranchNotMain' } - New-RCManifest - $Manifest = & $DevDependencies.Manifest - $FileList = $Manifest.FileList - $ManifestFile = $FileList | Where-Object {$_ -like '*.psd1'} - Test-ModuleManifest $ManifestFile - If ($Null -eq $CommitMessage) { - $CommitMessage = Switch ($Manifest.PrivateData.PSData.ReleaseNotes) { - { ($_ -split "`n").Count -eq 1 } { "$_" } - Default { "RELEASE: v$($Manifest.ModuleVersion)" } - } - } - $GitDiffFiles = @(git diff --name-only --cached) + @(git diff --name-only) - If ($GitDiffFiles.Count -eq 0) { Throw } - ,($GitDiffFiles | Select-Object -Unique) | - ForEach-Object { - If ($_.Count -eq $_.Where({$_ -in $FileList}, 'Until').Count) { Throw 'ModuleFilesNotModified' } - If ($Null -eq ($_ | Where-Object { $_ -eq $ManifestFile })) { Throw 'ModuleManifestNotModified' } - } - Invoke-Expression "git add $($FileList) latest.json Readme.md" - git commit --message "$CommitMessage" --quiet - git stash push --include-untracked --quiet - git switch module --quiet 2> $Null - If (!$?) { - git stash pop --quiet > $Null 2>&1 - Throw - } - git merge --no-commit main > $Null 2>&1 - $IsMergeError = !$? - $CDPattern = "$($PWD -replace '\\','\\')\\" - Get-ChildItem -Recurse -File | - Where-Object { ($_.FullName -replace $CDPattern) -inotin $FileList } | - Remove-Item - Get-ChildItem -Directory | - Where-Object { ($_.FullName -replace $CDPattern) -inotin @($FileList | - Where-Object { $_ -like '*\*' } | - ForEach-Object { ($_ -split '\\')[0] }) } | - Remove-Item -Recurse -Force - If ($IsMergeError) { - ,@(git diff --name-only) | - ForEach-Object { If ($_ -in $FileList) { Throw 'MergeConflict' } } - git add . - } - git commit --message "$CommitMessage" --quiet - git switch main --quiet 2> $Null - git stash pop --quiet > $Null 2>&1 - } - Catch { "ERROR: $($_.Exception.Message)" } - Pop-Location -} - -Filter Invoke-OnModuleBranch { - <# - .SYNOPSIS - Process a scriptblock on module branch - .NOTES - Precondition: - 1. The current branch does not have unstaged changes. - 2. The script block does not modify module - #> - - Param([Parameter(Mandatory=$true)] $ScriptBlock) - - Get-Module RegCli -ListAvailable | - ForEach-Object { - Push-Location $PSScriptRoot - git branch --show-current | - ForEach-Object { - Try { - git switch module --quiet 2> $Null - If (!$?) { Throw "StayOn_$_" } - git switch $_ --quiet 2> $Null - git stash push --include-untracked --quiet - git switch module --quiet - & $ScriptBlock - } - Catch { "ERROR: $($_.Exception.Message)" } - Finally { - git switch $_ --quiet 2> $Null - git stash pop --quiet > $Null 2>&1 - } - } - Pop-Location - } -} - -## TODO: Function must implement -WhatIf -Filter Publish-RCModule { - <# - .SYNOPSIS - Publish module to PSGallery - .NOTES - Precondition: - 1. The current branch is module - 2. The NUGET_API_KEY environment variable is set. - #> - - Invoke-OnModuleBranch { - If ((git branch --show-current) -ne 'module') { Throw 'BranchNotPwshModule' } - If ($null -eq $Env:NUGET_API_KEY) { Throw 'NUGET_API_KEY_IsNull' } - @{ - Name = 'RegCli'; - NuGetApiKey = $Env:NUGET_API_KEY; - } | ForEach-Object { Publish-Module @_ } - Write-Host "RegCli@v$((& $DevDependencies.Manifest).ModuleVersion) published" - } -} - -## TODO: Function must implement -WhatIf -Filter Push-RCModule { - <# - .SYNOPSIS - Push new module commit to GitHub - .NOTES - Precondition: - 1. The current branch is module - .OUTPUTS - Push details - #> - - Invoke-OnModuleBranch { - If ((git branch --show-current) -ne 'module') { Throw 'BranchNotPwhModule' } - git push origin module --force - If (!$?) { Throw 'PushModuleToGitHubFailed' } - "v$((& $DevDependencies.Manifest).ModuleVersion)" | - ForEach-Object { - If ($_ -inotin @(git tag --list)) { - git tag $_ - git push --tags - } - } - } -} - -Filter Deploy-RCModule { - <# - .SYNOPSIS - Deploy module Everywhere - #> - - Try { - { If ((git branch --show-current) -ne 'main') { Throw 'BranchNotMain' } } | - ForEach-Object { - & $_ - New-RCMerge - & $_ - } - Push-RCModule - Publish-RCModule - } - Catch { "ERROR: $($_.Exception.Message)" } -} - -Function Update-RCHelp { - <# - .SYNOPSIS - Update RegCli help document - .NOTES - Precondition: PlatyPS is installed - #> - - Begin { - $PlatyPsModule = Get-Module | Where-Object Name -eq 'PlatyPS' - Import-Module PlatyPS -RequiredVersion $DevDependencies.PlatyPS -Force - } - Process { - Push-Location $PSScriptRoot - New-ExternalHelp -Path .\en_us\ -OutputPath en-US -Force - Pop-Location - } - End { - Remove-Module PlatyPS -Force - If ($PlatyPsModule.Count -gt 0) { - Import-Module PlatyPS -RequiredVersion $PlatyPsModule.Version -Force - } - } -} - -Filter Install-BuildDependencies { - <# - .SYNOPSIS - Install build modules - #> - - { - Param( - $Name, - $PreInstall - ) - - If ((Get-Module $Name -ListAvailable | - Where-Object Version -eq $DevDependencies[$Name]).Count -eq 0) { - If ($Null -ne $PreInstall) { & $PreInstall } - Install-Module $Name -RequiredVersion $DevDependencies[$Name] -Force - } - } | ForEach-Object { & $_ PlatyPS } -} - -Filter New-RCJunction { - <# - .SYNOPSIS - Create the RegCli Junction in PSModulePath - #> - - Param([switch] $Force) - - $FirstPath = "$(($env:PSModulePath -split ';')[0])\RegCli" - If (Test-Path $FirstPath) { - If ($Force) { - Remove-Item $FirstPath -Force - } Else { - Return 'RegCli junction already exists' - } - } - @{ - Path = $FirstPath; - ItemType = 'Junction'; - Value = $PSScriptRoot - } | ForEach-Object { New-Item @_ } -} \ No newline at end of file diff --git a/dist.psm1 b/dist.psm1 new file mode 100644 index 0000000..3c9f113 --- /dev/null +++ b/dist.psm1 @@ -0,0 +1,65 @@ +$DevDependencies = @{ + ProgramName = '_' + RemoteRepo = (git ls-remote --get-url) -replace '\.git$' +} + +Function New-UpdaterScript { + <# + .SYNOPSIS + Create module manifest + .NOTES + Precondition: + 1. latest.json exists + #> + + $GithubRepo = $DevDependencies.RemoteRepo + $HeaderPath = '.\Header.ps1' + Push-Location $PSScriptRoot + Get-Content .\latest.json -Raw | + ConvertFrom-Json | + ForEach-Object { + @{ + Path = $HeaderPath + Version = $_.version + GUID = '0f0234b8-2357-4909-a0b2-094a02e96be4' + Author = 'Fabrice Sanga' + CompanyName = 'sangafabrice' + Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." + Description = 'Description' + RequiredModules = @('DownloadInfo','RegCli') + ExternalModuleDependencies = @('DownloadInfo','RegCli') + Tags = @('Tag') + LicenseUri = "$GithubRepo/blob/main/LICENSE.md" + ProjectUri = "$GithubRepo/tree/$(git branch --show-current)" + IconUri = '' + ReleaseNotes = $_.releaseNotes + } + } | ForEach-Object { New-ScriptFileInfo @_ -Force } + ((Get-Content $HeaderPath).Where({$_ -like 'Param()*'}, 'Until') + + (Get-Content .\Update.ps1)) -join "`n" | Out-String + Remove-Item $HeaderPath + Pop-Location +} + +Function Publish-UpdaterScript { + <# + .SYNOPSIS + Publish script to PSGallery + .NOTES + Precondition: + 1. The NUGET_API_KEY environment variable is set. + #> + + @{ + Path = "$PSScriptRoot\Update$($DevDependencies.ProgramName).ps1" | + ForEach-Object { + New-UpdaterScript | Out-File $_ + Return $_ + } + NuGetApiKey = $Env:NUGET_API_KEY + } | ForEach-Object { + Publish-Script @_ + Write-Host "$((Get-Item $_.Path).Name) published" + Remove-Item $_.Path -Exclude Update.ps1 + } +} \ No newline at end of file diff --git a/en-US/RegCli-help.xml b/en-US/RegCli-help.xml deleted file mode 100644 index de083cb..0000000 --- a/en-US/RegCli-help.xml +++ /dev/null @@ -1,557 +0,0 @@ - - - - - Expand-ChromiumInstaller - Expand - ChromiumInstaller - - Extracts files from a specified chromium installer (exe) file. - - - - The Expand-ChromiumInstaller extracts files from a specified executable chromium installer file to the directory in which the application is located (ApplicationPath). - - - - Expand-ChromiumInstaller - - Path - - Path to chromium installer. - - String - - String - - - None - - - ApplicationPath - - Path to chromium application executable. - - String - - String - - - None - - - - - - ApplicationPath - - Path to chromium application executable. - - String - - String - - - None - - - Path - - Path to chromium installer. - - String - - String - - - None - - - - - - System.String - - - - - - - - - - System.Void - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> Expand-ChromiumInstaller 'C:\chrome_installer.exe' 'C:\ProgramData\GoogleChrome\chrome.exe' - - This command installs Google Chrome to 'C:\ProgramData\GoogleChrome'. - - - - - - - - Get-ExecutableType - Get - ExecutableType - - Gets the machine type of a binary file. - - - - The Get-ExecutableType function gets the machine type of a binary file. When the file does not exist, the function returns the architecture of the Operating System. - - - - Get-ExecutableType - - Path - - Path to the binary file. - - String - - String - - - None - - - - - - Path - - Path to the binary file. - - String - - String - - - None - - - - - - System.String - - - - - - - - - - MachineType - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> [Environment]::Is64BitOperatingSystem -True - -PS C:\> Get-ExecutableType 'C:\GoogleChrome\chrome.exe' -x86 - -PS C:\> Remove-Item 'C:\GoogleChrome\chrome.exe' -PS C:\> Get-ExecutableType 'C:\GoogleChrome\chrome.exe' -x64 - - Get the machine type of chrome application. - - - - - - - - Save-Installer - Save - Installer - - Downloads a specified installer. - - - - The Save-Installer function downloads a specified installer to the %TEMP% directory and appends timestamp to the installer base name. The URL must be secured. - - - - Save-Installer - - Url - - Url of the installer to download. - - Uri - - Uri - - - None - - - - - - Url - - Url of the installer to download. - - Uri - - Uri - - - None - - - - - - System.Uri - - - - - - - - - - System.String - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> Save-Installer 'https://github.com/ytdl-org/youtube-dl/releases/download/2021.12.17/youtube-dl.exe' - - The command downloads youtube-dl.exe. - - - - - - - - Set-BatchRedirect - Set - BatchRedirect - - Set the content of the batch redirect to a specified application. - - - - - - - - Set-BatchRedirect - - BatchName - - Name of the batch redirect file. - - String - - String - - - None - - - ApplicationPath - - Path to the chromium executable. - - String - - String - - - None - - - - - - ApplicationPath - - Path to the chromium executable. - - String - - String - - - None - - - BatchName - - Name of the batch redirect file. - - String - - String - - - None - - - - - - System.String - - - - - - - - - - System.Void - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> Set-BatchRedirect chrome 'C:\GoogleChrome\chrome.exe' - - - - - - - - - - Set-ChromiumShortcut - Set - ChromiumShortcut - - Save a specified chromium application shortcut to Start Menu. - - - - - - - - Set-ChromiumShortcut - - Path - - Path to the chromium executable. - - String - - String - - - None - - - - - - Path - - Path to the chromium executable. - - String - - String - - - None - - - - - - System.String - - - - - - - - - - System.Void - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> Set-ChromiumShortcut "C:\Secure\AvastBrowser.exe" - - - - - - - - - - Set-ChromiumVisualElementsManifest - Set - ChromiumVisualElementsManifest - - Sets the content of the VisualElementsManifest.xml file. - - - - - - - - Set-ChromiumVisualElementsManifest - - Path - - Path to VisualElementsManifest.xml - - String - - String - - - None - - - BackgroundColor - - Hexadecimal color code. - - String - - String - - - None - - - - - - BackgroundColor - - Hexadecimal color code. - - String - - String - - - None - - - Path - - Path to VisualElementsManifest.xml - - String - - String - - - None - - - - - - System.String - - - - - - - - - - System.Void - - - - - - - - - - - - - - -------------------------- Example 1 -------------------------- - PS C:\> Set-ChromiumVisualElementsManifest 'C:\Secure\AvastBrowser.VisualElementsManifest.xml' '#2D364C' - - - - - - - - \ No newline at end of file diff --git a/en_us/Expand-ChromiumInstaller.md b/en_us/Expand-ChromiumInstaller.md deleted file mode 100644 index 7694ea9..0000000 --- a/en_us/Expand-ChromiumInstaller.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Expand-ChromiumInstaller - -## SYNOPSIS -Extracts files from a specified chromium installer (exe) file. - -## SYNTAX - -``` -Expand-ChromiumInstaller [-Path] [-ApplicationPath] [] -``` - -## DESCRIPTION -The Expand-ChromiumInstaller extracts files from a specified executable chromium installer file to the directory in which the application is located (ApplicationPath). - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> Expand-ChromiumInstaller 'C:\chrome_installer.exe' 'C:\ProgramData\GoogleChrome\chrome.exe' -``` - -This command installs Google Chrome to 'C:\ProgramData\GoogleChrome'. - -## PARAMETERS - -### -ApplicationPath -Path to chromium application executable. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: 1 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -Path -Path to chromium installer. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.String - -## OUTPUTS - -### System.Void - -## NOTES - -## RELATED LINKS diff --git a/en_us/Get-ExecutableType.md b/en_us/Get-ExecutableType.md deleted file mode 100644 index d34eb2b..0000000 --- a/en_us/Get-ExecutableType.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Get-ExecutableType - -## SYNOPSIS -Gets the machine type of a binary file. - -## SYNTAX - -``` -Get-ExecutableType [-Path] [] -``` - -## DESCRIPTION -The Get-ExecutableType function gets the machine type of a binary file. When the file does not exist, the function returns the architecture of the Operating System. - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> [Environment]::Is64BitOperatingSystem -True - -PS C:\> Get-ExecutableType 'C:\GoogleChrome\chrome.exe' -x86 - -PS C:\> Remove-Item 'C:\GoogleChrome\chrome.exe' -PS C:\> Get-ExecutableType 'C:\GoogleChrome\chrome.exe' -x64 -``` - -Get the machine type of chrome application. - -## PARAMETERS - -### -Path -Path to the binary file. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.String - -## OUTPUTS - -### MachineType - -## NOTES - -## RELATED LINKS diff --git a/en_us/RegCli.md b/en_us/RegCli.md deleted file mode 100644 index b272605..0000000 --- a/en_us/RegCli.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -Module Name: RegCli -Module Guid: 9d980765-e8a9-4dd6-b7b0-9142a7a6e704 -Download Help Link: -Help Version: 1.0.0.0 -Locale: en-US ---- - -# RegCli Module -## Description -Set of helper functions for updating applications. - -## RegCli Cmdlets -### [Expand-ChromiumInstaller](Expand-ChromiumInstaller.md) -Extracts files from a specified chromium installer (exe) file. - -### [Set-BatchRedirect](Set-BatchRedirect.md) -Set the content of the batch redirect to a specified application. - -### [Get-ExecutableType](Get-ExecutableType.md) -Gets the machine type of a binary file. - -### [Save-Installer](Save-Installer.md) -Downloads a specified installer. - -### [Set-ChromiumShortcut](Set-ChromiumShortcut.md) -Save a specified chromium application shortcut to Start Menu. - -### [Set-ChromiumVisualElementsManifest](Set-ChromiumVisualElementsManifest.md) -Sets the content of the VisualElementsManifest.xml file. - diff --git a/en_us/Save-Installer.md b/en_us/Save-Installer.md deleted file mode 100644 index f887571..0000000 --- a/en_us/Save-Installer.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Save-Installer - -## SYNOPSIS -Downloads a specified installer. - -## SYNTAX - -``` -Save-Installer [-Url] [] -``` - -## DESCRIPTION -The Save-Installer function downloads a specified installer to the %TEMP% directory and appends timestamp to the installer base name. The URL must be secured. - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> Save-Installer 'https://github.com/ytdl-org/youtube-dl/releases/download/2021.12.17/youtube-dl.exe' -``` - -The command downloads youtube-dl.exe. - -## PARAMETERS - -### -Url -Url of the installer to download. - -```yaml -Type: Uri -Parameter Sets: (All) -Aliases: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.Uri - -## OUTPUTS - -### System.String - -## NOTES - -## RELATED LINKS diff --git a/en_us/Set-BatchRedirect.md b/en_us/Set-BatchRedirect.md deleted file mode 100644 index 9f2c0de..0000000 --- a/en_us/Set-BatchRedirect.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Set-BatchRedirect - -## SYNOPSIS -Set the content of the batch redirect to a specified application. - -## SYNTAX - -``` -Set-BatchRedirect [-BatchName] [-ApplicationPath] [] -``` - -## DESCRIPTION - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> Set-BatchRedirect chrome 'C:\GoogleChrome\chrome.exe' -``` - -## PARAMETERS - -### -ApplicationPath -Path to the chromium executable. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: Path - -Required: True -Position: 1 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### -BatchName -Name of the batch redirect file. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: Name - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.String - -## OUTPUTS - -### System.Void - -## NOTES - -## RELATED LINKS diff --git a/en_us/Set-ChromiumShortcut.md b/en_us/Set-ChromiumShortcut.md deleted file mode 100644 index 3413add..0000000 --- a/en_us/Set-ChromiumShortcut.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Set-ChromiumShortcut - -## SYNOPSIS -Save a specified chromium application shortcut to Start Menu. - -## SYNTAX - -``` -Set-ChromiumShortcut [-Path] [] -``` - -## DESCRIPTION - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> Set-ChromiumShortcut "C:\Secure\AvastBrowser.exe" -``` - -## PARAMETERS - -### -Path -Path to the chromium executable. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.String - -## OUTPUTS - -### System.Void - -## NOTES - -## RELATED LINKS diff --git a/en_us/Set-ChromiumVisualElementsManifest.md b/en_us/Set-ChromiumVisualElementsManifest.md deleted file mode 100644 index 7e4ba9e..0000000 --- a/en_us/Set-ChromiumVisualElementsManifest.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -external help file: RegCli-help.xml -Module Name: RegCli -online version: -schema: 2.0.0 ---- - -# Set-ChromiumVisualElementsManifest - -## SYNOPSIS -Sets the content of the VisualElementsManifest.xml file. - -## SYNTAX - -``` -Set-ChromiumVisualElementsManifest [-Path] [[-BackgroundColor] ] [] -``` - -## DESCRIPTION - -## EXAMPLES - -### Example 1 -```powershell -PS C:\> Set-ChromiumVisualElementsManifest 'C:\Secure\AvastBrowser.VisualElementsManifest.xml' '#2D364C' -``` - -## PARAMETERS - -### -BackgroundColor -Hexadecimal color code. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: False -Position: 1 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -Path -Path to VisualElementsManifest.xml - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: True (ByPropertyName) -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -### System.String - -## OUTPUTS - -### System.Void - -## NOTES - -## RELATED LINKS diff --git a/icon.png b/icon.png deleted file mode 100644 index 1c2ac1af0ef32d7894a2105bf2f7c3ba15f6bfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12759 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 n*#6CwtO}cTb$4>ZUyy1n^_=Rih Date: Tue, 28 Jun 2022 12:36:35 +0200 Subject: [PATCH 02/35] add guid in devdep --- dist.psm1 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dist.psm1 b/dist.psm1 index 3c9f113..5667740 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,5 +1,6 @@ $DevDependencies = @{ - ProgramName = '_' + ProgramName = 'AvastSecure' + Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } @@ -21,7 +22,7 @@ Function New-UpdaterScript { @{ Path = $HeaderPath Version = $_.version - GUID = '0f0234b8-2357-4909-a0b2-094a02e96be4' + GUID = $DevDependencies.Guid Author = 'Fabrice Sanga' CompanyName = 'sangafabrice' Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." From d2ae282474b6b171e0c0131da96306eee2407f40 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:39:35 +0200 Subject: [PATCH 03/35] add guid in devdependencies --- dist.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index 5667740..544bc5b 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,5 +1,5 @@ $DevDependencies = @{ - ProgramName = 'AvastSecure' + ProgramName = '_' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } From 0693c16f6233d4042f8eac208f2f271f2e45de7c Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:43:26 +0200 Subject: [PATCH 04/35] Initial Avast Secure updater script. --- Update.ps1 | 43 +++++++++++++++++++++++++++++++++++++++++-- dist.psm1 | 2 +- latest.json | 4 ++-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index be09563..5c723f7 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -16,11 +16,50 @@ Param ( } | ForEach-Object { Get-Item @_ } ).FullName -ine $PSScriptRoot })] [string] - $InstallLocation = "${Env:ProgramData}\ProgramName", + $InstallLocation = "${Env:ProgramData}\AvastSecure", [ValidateNotNullOrEmpty()] [ValidateScript({ (Get-Item -LiteralPath $_).PSDrive.Name -iin @((Get-PSDrive -PSProvider FileSystem).Name) })] [string] $SaveTo = $PSScriptRoot -) \ No newline at end of file +) + +$BaseNameLocation = "$InstallLocation\AvastBrowser" +Switch ( + Get-DownloadInfo -PropertyList @{ + UpdateServiceURL = 'https://update.avastbrowser.com/service/update2' + ApplicationID = '{A8504530-742B-42BC-895D-2BAD6406F698}' + OwnerBrand = '2101' + OSArch = Get-ExecutableType "$BaseNameLocation.exe" + } -From Omaha +) { + { + @($_.Version,$_.Link,$_.Checksum) | + ForEach-Object { $_ -notin @($Null, '') } + } { + $Installer = "$SaveTo\$($_.Version).exe" + $Checksum = $_.Checksum + If (!(Test-Path $Installer)) { + Save-Installer "$($_.Link)" | + ForEach-Object { + If ($Checksum -ieq (Get-FileHash $_ SHA256).Hash) { + Remove-Item "$SaveTo\*" -Exclude (Get-Item $PSCommandPath).Name + Move-Item $_ -Destination $Installer + } + } + } + If (([version] $_.Version) -gt $(Try { [version] $( + @{ + LiteralPath = "$BaseNameLocation.exe" + ErrorAction = 'SilentlyContinue' + } | ForEach-Object { Get-ChildItem @_ } + ).VersionInfo.ProductVersion } Catch { })) { + Expand-ChromiumInstaller $Installer "$BaseNameLocation.exe" + Remove-Item "${BaseNameLocation}Uninstall.exe" -Force + } + } +} +Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#2D364C' +Set-ChromiumShortcut "$BaseNameLocation.exe" +Set-BatchRedirect 'secure' "$BaseNameLocation.exe" \ No newline at end of file diff --git a/dist.psm1 b/dist.psm1 index 544bc5b..5667740 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,5 +1,5 @@ $DevDependencies = @{ - ProgramName = '_' + ProgramName = 'AvastSecure' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } diff --git a/latest.json b/latest.json index e680b9e..50b9cc4 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "0.0.1", + "version": "1.0.0", "releaseNotes": [ - "Initial deployment ready script." + "Initial Avast Secure updater script." ] } \ No newline at end of file From 17eced8e28624357a2381fe17f0b1ec62195349c Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:52:44 +0200 Subject: [PATCH 05/35] add iconuri to devdependency --- dist.psm1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index 544bc5b..090a882 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,6 +1,7 @@ $DevDependencies = @{ ProgramName = '_' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' + IconUri = '' RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } @@ -32,7 +33,7 @@ Function New-UpdaterScript { Tags = @('Tag') LicenseUri = "$GithubRepo/blob/main/LICENSE.md" ProjectUri = "$GithubRepo/tree/$(git branch --show-current)" - IconUri = '' + IconUri = $DevDependencies.IconUri ReleaseNotes = $_.releaseNotes } } | ForEach-Object { New-ScriptFileInfo @_ -Force } From c2db029d9a5614ab17d2018942266f658a35c869 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:57:02 +0200 Subject: [PATCH 06/35] Change iconuri. --- dist.psm1 | 2 +- latest.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist.psm1 b/dist.psm1 index 415762d..846eaf4 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,7 +1,7 @@ $DevDependencies = @{ ProgramName = 'AvastSecure' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' - IconUri = '' + IconUri = 'https://rawcdn.githack.com/sangafabrice/choco-packages/f3f1c1aba27e253461cc4ddd677a68c3cace0e0b/icon.png' RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } diff --git a/latest.json b/latest.json index 50b9cc4..6c47646 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "1.0.0", + "version": "1.0.1", "releaseNotes": [ - "Initial Avast Secure updater script." + "Change iconuri." ] } \ No newline at end of file From c72169d282c2949a502a3401743fcd7b5847b15e Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 29 Jun 2022 02:08:19 +0200 Subject: [PATCH 07/35] add tags to devdependencies --- dist.psm1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index 090a882..525772b 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -2,6 +2,7 @@ $DevDependencies = @{ ProgramName = '_' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' IconUri = '' + Tags = @('Tag') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } @@ -30,7 +31,7 @@ Function New-UpdaterScript { Description = 'Description' RequiredModules = @('DownloadInfo','RegCli') ExternalModuleDependencies = @('DownloadInfo','RegCli') - Tags = @('Tag') + Tags = $DevDependencies.Tags LicenseUri = "$GithubRepo/blob/main/LICENSE.md" ProjectUri = "$GithubRepo/tree/$(git branch --show-current)" IconUri = $DevDependencies.IconUri From d4eb48ff2129c67df9c64f44a37b81b187324414 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 29 Jun 2022 02:21:15 +0200 Subject: [PATCH 08/35] add tags. --- latest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latest.json b/latest.json index 6c47646..930e50e 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "1.0.1", + "version": "1.0.2", "releaseNotes": [ - "Change iconuri." + "Add tags." ] } \ No newline at end of file From f35ae73a0eef24438ca7d4a142ae84905520b628 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 29 Jun 2022 02:40:32 +0200 Subject: [PATCH 09/35] add description to devdependencies --- dist.psm1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index 525772b..1d0d0ee 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,5 +1,6 @@ $DevDependencies = @{ ProgramName = '_' + Description = 'Description' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' IconUri = '' Tags = @('Tag') @@ -28,7 +29,7 @@ Function New-UpdaterScript { Author = 'Fabrice Sanga' CompanyName = 'sangafabrice' Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." - Description = 'Description' + Description = $DevDependencies.Description RequiredModules = @('DownloadInfo','RegCli') ExternalModuleDependencies = @('DownloadInfo','RegCli') Tags = $DevDependencies.Tags From 7d09d163a490de2bb36763100bb633214f0aa4a4 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:25:40 +0200 Subject: [PATCH 10/35] Restrict removed items to chromium installer. --- Update.ps1 | 3 ++- dist.psm1 | 7 +++++-- latest.json | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 5c723f7..809a88e 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -44,7 +44,8 @@ Switch ( Save-Installer "$($_.Link)" | ForEach-Object { If ($Checksum -ieq (Get-FileHash $_ SHA256).Hash) { - Remove-Item "$SaveTo\*" -Exclude (Get-Item $PSCommandPath).Name + (Get-Item "$SaveTo\*").Where({ $_.VersionInfo.FileDescription -ieq 'Avast Secure Browser Installer' }) | + Remove-Item Move-Item $_ -Destination $Installer } } diff --git a/dist.psm1 b/dist.psm1 index 4bf6779..a8097a4 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -62,8 +62,11 @@ Function Publish-UpdaterScript { } NuGetApiKey = $Env:NUGET_API_KEY } | ForEach-Object { - Publish-Script @_ - Write-Host "$((Get-Item $_.Path).Name) published" + Try { + Publish-Script @_ + Write-Host "$((Get-Item $_.Path).Name) published" + } + Catch { } Remove-Item $_.Path -Exclude Update.ps1 } } \ No newline at end of file diff --git a/latest.json b/latest.json index 6b5946d..ea355c0 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "1.0.3", + "version": "1.1.0", "releaseNotes": [ - "Add description." + "Restrict removed items to chromium installer." ] } \ No newline at end of file From 8dad9948abd4a97931c393c798382c44dce43bab Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:29:26 +0200 Subject: [PATCH 11/35] correct publishing notification --- dist.psm1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dist.psm1 b/dist.psm1 index a8097a4..4551cdd 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -65,8 +65,7 @@ Function Publish-UpdaterScript { Try { Publish-Script @_ Write-Host "$((Get-Item $_.Path).Name) published" - } - Catch { } + } Catch { } Remove-Item $_.Path -Exclude Update.ps1 } } \ No newline at end of file From dbcfeb880ffff17ed8ca1f352c218d2615ebeb6f Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sun, 3 Jul 2022 15:15:30 +0200 Subject: [PATCH 12/35] add outdated uninstaller removal --- Update.ps1 | 75 ++++++++++++++++++++++++++++++++++++++++++++++------- dist.psm1 | 4 +-- latest.json | 5 ++-- 3 files changed, 70 insertions(+), 14 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 809a88e..92a2761 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -1,3 +1,4 @@ +[CmdletBinding()] Param ( [ValidateNotNullOrEmpty()] [ValidateScript({ @@ -26,6 +27,7 @@ Param ( ) $BaseNameLocation = "$InstallLocation\AvastBrowser" +Write-Verbose 'Retrieve install or update information...' Switch ( Get-DownloadInfo -PropertyList @{ UpdateServiceURL = 'https://update.avastbrowser.com/service/update2' @@ -38,24 +40,36 @@ Switch ( @($_.Version,$_.Link,$_.Checksum) | ForEach-Object { $_ -notin @($Null, '') } } { - $Installer = "$SaveTo\$($_.Version).exe" + $Version = [version]$_.Version + Write-Verbose "Avast Secure browser $Version installation starts..." + $SaveToContent = (Get-ChildItem $SaveTo).Where({ $_.VersionInfo.FileDescription -ieq 'Avast Secure Browser Installer' }) + $Installer = $SaveToContent.Where({ [version]$_.VersionInfo.ProductVersion -eq $Version }).FullName ?? + "$SaveTo\$($_.Version).exe" $Checksum = $_.Checksum If (!(Test-Path $Installer)) { + Write-Verbose 'Download Avast Secure browser installer...' Save-Installer "$($_.Link)" | ForEach-Object { If ($Checksum -ieq (Get-FileHash $_ SHA256).Hash) { - (Get-Item "$SaveTo\*").Where({ $_.VersionInfo.FileDescription -ieq 'Avast Secure Browser Installer' }) | - Remove-Item + Write-Verbose 'Hashes match...' Move-Item $_ -Destination $Installer } } } - If (([version] $_.Version) -gt $(Try { [version] $( - @{ - LiteralPath = "$BaseNameLocation.exe" - ErrorAction = 'SilentlyContinue' - } | ForEach-Object { Get-ChildItem @_ } - ).VersionInfo.ProductVersion } Catch { })) { + If (Test-Path $Installer) { + Write-Verbose 'Delete outdated installers...' + $SaveToContent | Remove-Item -Exclude (Get-Item $Installer).Name + } + $IsCurrentInstallOutdated = { + $Version -gt $(Try { [version] $( + @{ + LiteralPath = "$BaseNameLocation.exe" + ErrorAction = 'SilentlyContinue' + } | ForEach-Object { Get-Item @_ } + ).VersionInfo.ProductVersion } Catch { }) + } + If (& $IsCurrentInstallOutdated) { + Write-Verbose 'Current Secure install is outdated or it is not installed...' Expand-ChromiumInstaller $Installer "$BaseNameLocation.exe" Remove-Item "${BaseNameLocation}Uninstall.exe" -Force } @@ -63,4 +77,45 @@ Switch ( } Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#2D364C' Set-ChromiumShortcut "$BaseNameLocation.exe" -Set-BatchRedirect 'secure' "$BaseNameLocation.exe" \ No newline at end of file +Set-BatchRedirect 'secure' "$BaseNameLocation.exe" +If (!(& $IsCurrentInstallOutdated)) { Write-Verbose "Avast Secure browser $Version installation complete." } + +<# +.SYNOPSIS + Updates Avast Secure browser software. +.DESCRIPTION + The script installs or updates Avast Secure browser on Windows. +.NOTES + Required: at least Powershell Core 7. +.PARAMETER InstallLocation + Path to the installation directory. + It is restricted to file system paths. + It does not necessary exists. + It defaults to %ProgramData%\AvastSecure. +.PARAMETER SaveTo + Path to the directory of the downloaded installer. + It is an existing file system path. + It defaults to the script directory. +.EXAMPLE + Get-ChildItem C:\ProgramData\AvastSecure -ErrorAction SilentlyContinue + + PS > .\UpdateAvastSecure.ps1 -InstallLocation C:\ProgramData\AvastSecure -SaveTo . + + PS > Get-ChildItem C:\ProgramData\AvastSecure | Select-Object Name + Name + ---- + 102.1.17190.115 + AvastBrowser.exe + AvastBrowser.VisualElementsManifest.xml + AvastBrowserQHelper.exe + browser_proxy.exe + master_preferences + + PS > Get-ChildItem C:\ProgramData\AvastSecure | Select-Object Name + Name + ---- + 102.1.17190.115.exe + UpdateAvastSecure.ps1 + + Install Avast Secure browser to 'C:\ProgramData\AvastSecure' and save its setup installer to the current directory. +#> \ No newline at end of file diff --git a/dist.psm1 b/dist.psm1 index 4551cdd..f501dc8 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,6 +1,6 @@ $DevDependencies = @{ ProgramName = 'AvastSecure' - Description = 'The script updates Avast Secure browser.' + Description = 'The script installs or updates Avast Secure browser on Windows.' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' IconUri = 'https://rawcdn.githack.com/sangafabrice/choco-packages/f3f1c1aba27e253461cc4ddd677a68c3cace0e0b/icon.png' Tags = @('avast','secure','chromium','omaha','update','browser') @@ -39,7 +39,7 @@ Function New-UpdaterScript { ReleaseNotes = $_.releaseNotes } } | ForEach-Object { New-ScriptFileInfo @_ -Force } - ((Get-Content $HeaderPath).Where({$_ -like 'Param()*'}, 'Until') + + ((Get-Content $HeaderPath).Where({$_ -like "`<`# "}, 'Until') + (Get-Content .\Update.ps1)) -join "`n" | Out-String Remove-Item $HeaderPath Pop-Location diff --git a/latest.json b/latest.json index ea355c0..7039236 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,7 @@ { - "version": "1.1.0", + "version": "2.0.0", "releaseNotes": [ - "Restrict removed items to chromium installer." + "Add verbosity.", + "Exclude latest installer from outdated installer items removal." ] } \ No newline at end of file From 92893f19ecccf3009b24726ef8d587ae406ee4a0 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Mon, 4 Jul 2022 14:18:06 +0200 Subject: [PATCH 13/35] Add retrieving update info from saveTo folder --- Update.ps1 | 91 +++++++++++++++++++++++++---------------------------- dist.psm1 | 8 ++++- latest.json | 7 +++-- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 92a2761..c0fe2f4 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -26,59 +26,52 @@ Param ( $SaveTo = $PSScriptRoot ) -$BaseNameLocation = "$InstallLocation\AvastBrowser" -Write-Verbose 'Retrieve install or update information...' -Switch ( - Get-DownloadInfo -PropertyList @{ - UpdateServiceURL = 'https://update.avastbrowser.com/service/update2' - ApplicationID = '{A8504530-742B-42BC-895D-2BAD6406F698}' - OwnerBrand = '2101' - OSArch = Get-ExecutableType "$BaseNameLocation.exe" - } -From Omaha -) { - { - @($_.Version,$_.Link,$_.Checksum) | - ForEach-Object { $_ -notin @($Null, '') } - } { - $Version = [version]$_.Version - Write-Verbose "Avast Secure browser $Version installation starts..." - $SaveToContent = (Get-ChildItem $SaveTo).Where({ $_.VersionInfo.FileDescription -ieq 'Avast Secure Browser Installer' }) - $Installer = $SaveToContent.Where({ [version]$_.VersionInfo.ProductVersion -eq $Version }).FullName ?? - "$SaveTo\$($_.Version).exe" - $Checksum = $_.Checksum - If (!(Test-Path $Installer)) { - Write-Verbose 'Download Avast Secure browser installer...' - Save-Installer "$($_.Link)" | - ForEach-Object { - If ($Checksum -ieq (Get-FileHash $_ SHA256).Hash) { - Write-Verbose 'Hashes match...' - Move-Item $_ -Destination $Installer - } - } - } - If (Test-Path $Installer) { - Write-Verbose 'Delete outdated installers...' - $SaveToContent | Remove-Item -Exclude (Get-Item $Installer).Name - } - $IsCurrentInstallOutdated = { - $Version -gt $(Try { [version] $( - @{ - LiteralPath = "$BaseNameLocation.exe" - ErrorAction = 'SilentlyContinue' - } | ForEach-Object { Get-Item @_ } - ).VersionInfo.ProductVersion } Catch { }) +& { + $BaseNameLocation = "$InstallLocation\AvastBrowser" + $NameLocation = "$BaseNameLocation.exe" + $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' + Write-Verbose 'Retrieve install or update information...' + $UpdateInfo = + Get-DownloadInfo -PropertyList @{ + UpdateServiceURL = 'https://update.avastbrowser.com/service/update2' + ApplicationID = '{A8504530-742B-42BC-895D-2BAD6406F698}' + OwnerBrand = '2101' + OSArch = Get-ExecutableType $NameLocation + } -From Omaha | + Where-Object { + @($_.Version,$_.Link,$_.Checksum) | + ForEach-Object { $_ -notin @($Null, '') } } - If (& $IsCurrentInstallOutdated) { - Write-Verbose 'Current Secure install is outdated or it is not installed...' - Expand-ChromiumInstaller $Installer "$BaseNameLocation.exe" + $InstallerVersion = $UpdateInfo.Version + $SoftwareName = 'Avast Secure Browser' + $InstallerDescription = "$SoftwareName Installer" + If ($UpdateInfo.Count -le 0) { + $InstallerVersion = "$( + Get-ChildItem $SaveTo | + Select-Object VersionInfo -ExpandProperty VersionInfo | + Where-Object { $_.FileDescription -ieq $InstallerDescription } | + ForEach-Object { [version] $_.ProductVersion } | + Sort-Object -Descending | + Select-Object -First 1 + )" + } + Try { + New-RegCliUpdate $NameLocation $SaveTo $InstallerVersion $InstallerDescription | + Import-Module -Verbose:$False -Force + If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" $UpdateInfo.Checksum -Verbose:$VerbosePreferenceBool} + Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool + If (Test-InstallOutdated) { + Write-Verbose 'Current install is outdated or not installed...' + Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation Remove-Item "${BaseNameLocation}Uninstall.exe" -Force } - } + Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#2D364C' + Set-ChromiumShortcut $NameLocation + Set-BatchRedirect 'secure' $NameLocation + If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $InstallerVersion installation complete." } + } + Catch { } } -Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#2D364C' -Set-ChromiumShortcut "$BaseNameLocation.exe" -Set-BatchRedirect 'secure' "$BaseNameLocation.exe" -If (!(& $IsCurrentInstallOutdated)) { Write-Verbose "Avast Secure browser $Version installation complete." } <# .SYNOPSIS diff --git a/dist.psm1 b/dist.psm1 index f501dc8..fcd55ef 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -30,7 +30,13 @@ Function New-UpdaterScript { CompanyName = 'sangafabrice' Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." Description = $DevDependencies.Description - RequiredModules = @('DownloadInfo','RegCli') + RequiredModules = @(@{ + ModuleName = 'DownloadInfo' + ModuleVersion = '3.2.0' + },@{ + ModuleName = 'RegCli' + ModuleVersion = '2.0.2' + }) ExternalModuleDependencies = @('DownloadInfo','RegCli') Tags = $DevDependencies.Tags LicenseUri = "$GithubRepo/blob/main/LICENSE.md" diff --git a/latest.json b/latest.json index 7039236..2476f4c 100644 --- a/latest.json +++ b/latest.json @@ -1,7 +1,8 @@ { - "version": "2.0.0", + "version": "3.0.0", "releaseNotes": [ - "Add verbosity.", - "Exclude latest installer from outdated installer items removal." + "Update related to RegCli 2.0.2 update.", + "Change code format.", + "Add retrieving update info from saveTo folder in case an error is thrown in Get-DownloadInfo" ] } \ No newline at end of file From 6cca05cb5bae6b195288e5688d0d83ecc0379832 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 5 Jul 2022 18:31:49 +0200 Subject: [PATCH 14/35] correct typo in comment doc --- Update.ps1 | 4 ++-- latest.json | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index c0fe2f4..d208486 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -58,7 +58,7 @@ Param ( Try { New-RegCliUpdate $NameLocation $SaveTo $InstallerVersion $InstallerDescription | Import-Module -Verbose:$False -Force - If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" $UpdateInfo.Checksum -Verbose:$VerbosePreferenceBool} + If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" $UpdateInfo.Checksum -Verbose:$VerbosePreferenceBool } Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool If (Test-InstallOutdated) { Write-Verbose 'Current install is outdated or not installed...' @@ -104,7 +104,7 @@ Param ( browser_proxy.exe master_preferences - PS > Get-ChildItem C:\ProgramData\AvastSecure | Select-Object Name + PS > Get-ChildItem | Select-Object Name Name ---- 102.1.17190.115.exe diff --git a/latest.json b/latest.json index 2476f4c..501b5a9 100644 --- a/latest.json +++ b/latest.json @@ -1,8 +1,6 @@ { - "version": "3.0.0", + "version": "3.0.1", "releaseNotes": [ - "Update related to RegCli 2.0.2 update.", - "Change code format.", - "Add retrieving update info from saveTo folder in case an error is thrown in Get-DownloadInfo" + "Correct typo in comment-help" ] } \ No newline at end of file From 4d50f6dee150ce6b25c0cd064d306fd68512134d Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 9 Jul 2022 09:26:39 +0200 Subject: [PATCH 15/35] initial vivaldi updater --- Update.ps1 | 66 +++++++++++++++++++++++++++++----------------------- dist.psm1 | 6 ++--- icon.png | Bin 0 -> 12658 bytes latest.json | 4 ++-- 4 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 icon.png diff --git a/Update.ps1 b/Update.ps1 index d208486..f694b0d 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -17,7 +17,7 @@ Param ( } | ForEach-Object { Get-Item @_ } ).FullName -ine $PSScriptRoot })] [string] - $InstallLocation = "${Env:ProgramData}\AvastSecure", + $InstallLocation = "${Env:ProgramData}\Vivaldi", [ValidateNotNullOrEmpty()] [ValidateScript({ (Get-Item -LiteralPath $_).PSDrive.Name -iin @@ -27,23 +27,33 @@ Param ( ) & { - $BaseNameLocation = "$InstallLocation\AvastBrowser" + $BaseNameLocation = "$InstallLocation\vivaldi" $NameLocation = "$BaseNameLocation.exe" $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' Write-Verbose 'Retrieve install or update information...' $UpdateInfo = - Get-DownloadInfo -PropertyList @{ - UpdateServiceURL = 'https://update.avastbrowser.com/service/update2' - ApplicationID = '{A8504530-742B-42BC-895D-2BAD6406F698}' - OwnerBrand = '2101' - OSArch = Get-ExecutableType $NameLocation - } -From Omaha | + $(Try { + (Invoke-WebRequest 'https://vivaldi.com/download/' -Verbose:$False).Links.href -like '*.exe' | + Select-Object @{ + Name = 'Version' + Expression = { + [void] ($_ -match "Vivaldi\.(?(\d+\.){3}\d+)$(If((Get-ExecutableType $NameLocation) -eq 'x64'){ '\.x64' })\.exe$") + [version] $Matches.Version + } + },@{ + Name = 'Link' + Expression = { $_ } + } -Unique | + Where-Object { ![string]::IsNullOrEmpty($_.Version) } | + Sort-Object -Descending -Property Version | + Select-Object -First 1 + } Catch { }) | Where-Object { - @($_.Version,$_.Link,$_.Checksum) | + @($_.Version,$_.Link) | ForEach-Object { $_ -notin @($Null, '') } } $InstallerVersion = $UpdateInfo.Version - $SoftwareName = 'Avast Secure Browser' + $SoftwareName = 'Vivaldi' $InstallerDescription = "$SoftwareName Installer" If ($UpdateInfo.Count -le 0) { $InstallerVersion = "$( @@ -58,16 +68,15 @@ Param ( Try { New-RegCliUpdate $NameLocation $SaveTo $InstallerVersion $InstallerDescription | Import-Module -Verbose:$False -Force - If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" $UpdateInfo.Checksum -Verbose:$VerbosePreferenceBool } + If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" -Verbose:$VerbosePreferenceBool } Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool If (Test-InstallOutdated) { Write-Verbose 'Current install is outdated or not installed...' Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation - Remove-Item "${BaseNameLocation}Uninstall.exe" -Force } - Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#2D364C' + Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#EF3939' Set-ChromiumShortcut $NameLocation - Set-BatchRedirect 'secure' $NameLocation + Set-BatchRedirect 'vivaldi' $NameLocation If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $InstallerVersion installation complete." } } Catch { } @@ -75,40 +84,39 @@ Param ( <# .SYNOPSIS - Updates Avast Secure browser software. + Updates Vivaldi browser software. .DESCRIPTION - The script installs or updates Avast Secure browser on Windows. + The script installs or updates Vivaldi browser on Windows. .NOTES Required: at least Powershell Core 7. .PARAMETER InstallLocation Path to the installation directory. It is restricted to file system paths. It does not necessary exists. - It defaults to %ProgramData%\AvastSecure. + It defaults to %ProgramData%\Vivaldi. .PARAMETER SaveTo Path to the directory of the downloaded installer. It is an existing file system path. It defaults to the script directory. .EXAMPLE - Get-ChildItem C:\ProgramData\AvastSecure -ErrorAction SilentlyContinue + Get-ChildItem C:\ProgramData\Vivaldi -ErrorAction SilentlyContinue - PS > .\UpdateAvastSecure.ps1 -InstallLocation C:\ProgramData\AvastSecure -SaveTo . + PS > .\UpdateVivaldi.ps1 -InstallLocation C:\ProgramData\Vivaldi -SaveTo . - PS > Get-ChildItem C:\ProgramData\AvastSecure | Select-Object Name + PS > Get-ChildItem C:\ProgramData\Vivaldi | Select-Object Name Name ---- - 102.1.17190.115 - AvastBrowser.exe - AvastBrowser.VisualElementsManifest.xml - AvastBrowserQHelper.exe - browser_proxy.exe - master_preferences + 5.3.2679.68 + update_notifier.exe + vivaldi.exe + vivaldi.VisualElementsManifest.xml + vivaldi_proxy.exe PS > Get-ChildItem | Select-Object Name Name ---- - 102.1.17190.115.exe - UpdateAvastSecure.ps1 + 5.3.2679.68.exe + UpdateVivaldi.ps1 - Install Avast Secure browser to 'C:\ProgramData\AvastSecure' and save its setup installer to the current directory. + Install Vivaldi browser to 'C:\ProgramData\Vivaldi' and save its setup installer to the current directory. #> \ No newline at end of file diff --git a/dist.psm1 b/dist.psm1 index fcd55ef..b55eb53 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,9 +1,9 @@ $DevDependencies = @{ - ProgramName = 'AvastSecure' - Description = 'The script installs or updates Avast Secure browser on Windows.' + ProgramName = 'Vivaldi' + Description = 'The script installs or updates Vivaldi browser on Windows.' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' IconUri = 'https://rawcdn.githack.com/sangafabrice/choco-packages/f3f1c1aba27e253461cc4ddd677a68c3cace0e0b/icon.png' - Tags = @('avast','secure','chromium','omaha','update','browser') + Tags = @('vivaldi','chromium','update','browser') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b07679ac7ce59bea05d79975799afc99b44182a7 GIT binary patch literal 12658 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 literal 0 HcmV?d00001 diff --git a/latest.json b/latest.json index 501b5a9..0e8b702 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "3.0.1", + "version": "0.0.1", "releaseNotes": [ - "Correct typo in comment-help" + "Initial Vivaldi browser updater." ] } \ No newline at end of file From 88e8345bfd93c03273280405759b79dae697a7f0 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 9 Jul 2022 09:41:18 +0200 Subject: [PATCH 16/35] remove downloadinfo and restrict regcli to be greater than 2.1.0 --- dist.psm1 | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/dist.psm1 b/dist.psm1 index b55eb53..bb38f8f 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -30,14 +30,11 @@ Function New-UpdaterScript { CompanyName = 'sangafabrice' Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." Description = $DevDependencies.Description - RequiredModules = @(@{ - ModuleName = 'DownloadInfo' - ModuleVersion = '3.2.0' - },@{ + RequiredModules = @{ ModuleName = 'RegCli' - ModuleVersion = '2.0.2' - }) - ExternalModuleDependencies = @('DownloadInfo','RegCli') + ModuleVersion = '2.1.0' + } + ExternalModuleDependencies = 'RegCli' Tags = $DevDependencies.Tags LicenseUri = "$GithubRepo/blob/main/LICENSE.md" ProjectUri = "$GithubRepo/tree/$(git branch --show-current)" From d93e7a0dcd267c2d8240b30e272593dc40cd01e7 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 9 Jul 2022 09:45:44 +0200 Subject: [PATCH 17/35] add updater icon --- dist.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index bb38f8f..2bfefb9 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -2,7 +2,7 @@ $DevDependencies = @{ ProgramName = 'Vivaldi' Description = 'The script installs or updates Vivaldi browser on Windows.' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' - IconUri = 'https://rawcdn.githack.com/sangafabrice/choco-packages/f3f1c1aba27e253461cc4ddd677a68c3cace0e0b/icon.png' + IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/88e8345bfd93c03273280405759b79dae697a7f0/icon.png' Tags = @('vivaldi','chromium','update','browser') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } From 58d15da2c7da327f3561e3c86884582d7e0db854 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 9 Jul 2022 18:13:34 +0200 Subject: [PATCH 18/35] initial blisk updater --- Update.ps1 | 49 +++++++++++++++++++++++++++---------------------- dist.psm1 | 6 +++--- icon.png | Bin 12658 -> 2840 bytes latest.json | 2 +- 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index f694b0d..36c7aa5 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -17,7 +17,7 @@ Param ( } | ForEach-Object { Get-Item @_ } ).FullName -ine $PSScriptRoot })] [string] - $InstallLocation = "${Env:ProgramData}\Vivaldi", + $InstallLocation = "${Env:ProgramData}\Blisk", [ValidateNotNullOrEmpty()] [ValidateScript({ (Get-Item -LiteralPath $_).PSDrive.Name -iin @@ -27,17 +27,23 @@ Param ( ) & { - $BaseNameLocation = "$InstallLocation\vivaldi" - $NameLocation = "$BaseNameLocation.exe" + $NameLocation = "$InstallLocation\blisk.exe" $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' Write-Verbose 'Retrieve install or update information...' $UpdateInfo = $(Try { - (Invoke-WebRequest 'https://vivaldi.com/download/' -Verbose:$False).Links.href -like '*.exe' | + @{ + Uri = 'https://blisk.io/download/?os=win' + UserAgent = 'NSISDL/1.2 (Mozilla)' + MaximumRedirection = 0 + SkipHttpErrorCheck = $True + ErrorAction = 'SilentlyContinue' + Verbose = $False + } | ForEach-Object { (Invoke-WebRequest @_).Headers.Location } | Select-Object @{ Name = 'Version' Expression = { - [void] ($_ -match "Vivaldi\.(?(\d+\.){3}\d+)$(If((Get-ExecutableType $NameLocation) -eq 'x64'){ '\.x64' })\.exe$") + [void] ($_ -match "BliskInstaller_(?(\d+\.){3}\d+)\.exe$") [version] $Matches.Version } },@{ @@ -53,7 +59,7 @@ Param ( ForEach-Object { $_ -notin @($Null, '') } } $InstallerVersion = $UpdateInfo.Version - $SoftwareName = 'Vivaldi' + $SoftwareName = 'Blisk' $InstallerDescription = "$SoftwareName Installer" If ($UpdateInfo.Count -le 0) { $InstallerVersion = "$( @@ -74,9 +80,9 @@ Param ( Write-Verbose 'Current install is outdated or not installed...' Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation } - Set-ChromiumVisualElementsManifest "$BaseNameLocation.VisualElementsManifest.xml" '#EF3939' + Set-ChromiumVisualElementsManifest "$InstallLocation\chrome.VisualElementsManifest.xml" '#5F6368' Set-ChromiumShortcut $NameLocation - Set-BatchRedirect 'vivaldi' $NameLocation + Set-BatchRedirect 'blisk' $NameLocation If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $InstallerVersion installation complete." } } Catch { } @@ -84,39 +90,38 @@ Param ( <# .SYNOPSIS - Updates Vivaldi browser software. + Updates Blisk browser software. .DESCRIPTION - The script installs or updates Vivaldi browser on Windows. + The script installs or updates Blisk browser on Windows. .NOTES Required: at least Powershell Core 7. .PARAMETER InstallLocation Path to the installation directory. It is restricted to file system paths. It does not necessary exists. - It defaults to %ProgramData%\Vivaldi. + It defaults to %ProgramData%\Blisk. .PARAMETER SaveTo Path to the directory of the downloaded installer. It is an existing file system path. It defaults to the script directory. .EXAMPLE - Get-ChildItem C:\ProgramData\Vivaldi -ErrorAction SilentlyContinue + Get-ChildItem C:\ProgramData\Blisk -ErrorAction SilentlyContinue - PS > .\UpdateVivaldi.ps1 -InstallLocation C:\ProgramData\Vivaldi -SaveTo . + PS > .\UpdateBlisk.ps1 -InstallLocation C:\ProgramData\Blisk -SaveTo . - PS > Get-ChildItem C:\ProgramData\Vivaldi | Select-Object Name + PS > Get-ChildItem C:\ProgramData\Blisk | Select-Object Name Name ---- - 5.3.2679.68 - update_notifier.exe - vivaldi.exe - vivaldi.VisualElementsManifest.xml - vivaldi_proxy.exe + 18.0.193.167 + blisk.exe + chrome.VisualElementsManifest.xml + chrome_proxy.exe PS > Get-ChildItem | Select-Object Name Name ---- - 5.3.2679.68.exe - UpdateVivaldi.ps1 + 18.0.193.167.exe + UpdateBlisk.ps1 - Install Vivaldi browser to 'C:\ProgramData\Vivaldi' and save its setup installer to the current directory. + Install Blisk browser to 'C:\ProgramData\Blisk' and save its setup installer to the current directory. #> \ No newline at end of file diff --git a/dist.psm1 b/dist.psm1 index 2bfefb9..cc9f543 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -1,9 +1,9 @@ $DevDependencies = @{ - ProgramName = 'Vivaldi' - Description = 'The script installs or updates Vivaldi browser on Windows.' + ProgramName = 'Blisk' + Description = 'The script installs or updates Blisk browser on Windows.' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/88e8345bfd93c03273280405759b79dae697a7f0/icon.png' - Tags = @('vivaldi','chromium','update','browser') + Tags = @('blisk','chromium','update','browser') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } diff --git a/icon.png b/icon.png index b07679ac7ce59bea05d79975799afc99b44182a7..50b56a4530b44761da74cfbc57d1cb189358a8ce 100644 GIT binary patch literal 2840 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 diff --git a/latest.json b/latest.json index 0e8b702..189d88c 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { "version": "0.0.1", "releaseNotes": [ - "Initial Vivaldi browser updater." + "Initial Blisk browser updater." ] } \ No newline at end of file From fa58a7c4c4acef39afa49bfe3d04ba192cd16971 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 9 Jul 2022 18:16:02 +0200 Subject: [PATCH 19/35] change icon --- dist.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index cc9f543..9610c21 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -2,7 +2,7 @@ $DevDependencies = @{ ProgramName = 'Blisk' Description = 'The script installs or updates Blisk browser on Windows.' Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' - IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/88e8345bfd93c03273280405759b79dae697a7f0/icon.png' + IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/58d15da2c7da327f3561e3c86884582d7e0db854/icon.png' Tags = @('blisk','chromium','update','browser') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } From 56a80df07fd1d91eab33bb155c668c5555a309b6 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:23:37 +0200 Subject: [PATCH 20/35] update regcli required version --- dist.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist.psm1 b/dist.psm1 index 9610c21..32cc353 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -32,7 +32,7 @@ Function New-UpdaterScript { Description = $DevDependencies.Description RequiredModules = @{ ModuleName = 'RegCli' - ModuleVersion = '2.1.0' + ModuleVersion = '2.3.2' } ExternalModuleDependencies = 'RegCli' Tags = $DevDependencies.Tags From 6a5c4e2a362239bfc3f8165724e6bee347f4e5e4 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 12 Jul 2022 11:19:50 +0200 Subject: [PATCH 21/35] Force the script to load RegCli 2.3.2 --- latest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latest.json b/latest.json index 189d88c..0eb67db 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "0.0.1", + "version": "0.0.2", "releaseNotes": [ - "Initial Blisk browser updater." + "Force the script to load RegCli 2.3.2" ] } \ No newline at end of file From 410832b54bc95eec1790ac9d8ba231896d60fd54 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Mon, 18 Jul 2022 14:38:06 +0200 Subject: [PATCH 22/35] Force the script to load RegCli 3.0.0 --- Update.ps1 | 62 ++++++++++------------------------------------------- dist.psm1 | 9 +++++--- latest.json | 4 ++-- 3 files changed, 19 insertions(+), 56 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 36c7aa5..20504e8 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -1,28 +1,12 @@ [CmdletBinding()] Param ( [ValidateNotNullOrEmpty()] - [ValidateScript({ - (& { - Param($Path) - $Pattern = '(?^.+):' - If ($Path -match $Pattern -or $PWD -match $Pattern) { - Return $Matches.Drive -iin @((Get-PSDrive -PSProvider FileSystem).Name) - } - Return $False - } $_) -and - $( - @{ - LiteralPath = $_ - ErrorAction = 'SilentlyContinue' - } | ForEach-Object { Get-Item @_ } - ).FullName -ine $PSScriptRoot - })] [string] + [ValidateScript({ Test-InstallLocation $_ $PSScriptRoot })] + [string] $InstallLocation = "${Env:ProgramData}\Blisk", [ValidateNotNullOrEmpty()] - [ValidateScript({ - (Get-Item -LiteralPath $_).PSDrive.Name -iin - @((Get-PSDrive -PSProvider FileSystem).Name) - })] [string] + [ValidateScript({ Test-InstallerLocation $_ })] + [string] $SaveTo = $PSScriptRoot ) @@ -31,29 +15,7 @@ Param ( $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' Write-Verbose 'Retrieve install or update information...' $UpdateInfo = - $(Try { - @{ - Uri = 'https://blisk.io/download/?os=win' - UserAgent = 'NSISDL/1.2 (Mozilla)' - MaximumRedirection = 0 - SkipHttpErrorCheck = $True - ErrorAction = 'SilentlyContinue' - Verbose = $False - } | ForEach-Object { (Invoke-WebRequest @_).Headers.Location } | - Select-Object @{ - Name = 'Version' - Expression = { - [void] ($_ -match "BliskInstaller_(?(\d+\.){3}\d+)\.exe$") - [version] $Matches.Version - } - },@{ - Name = 'Link' - Expression = { $_ } - } -Unique | - Where-Object { ![string]::IsNullOrEmpty($_.Version) } | - Sort-Object -Descending -Property Version | - Select-Object -First 1 - } Catch { }) | + Get-DownloadInfo -PropertyList @{} -From Blisk | Where-Object { @($_.Version,$_.Link) | ForEach-Object { $_ -notin @($Null, '') } @@ -64,9 +26,10 @@ Param ( If ($UpdateInfo.Count -le 0) { $InstallerVersion = "$( Get-ChildItem $SaveTo | - Select-Object VersionInfo -ExpandProperty VersionInfo | - Where-Object { $_.FileDescription -ieq $InstallerDescription } | - ForEach-Object { [version] $_.ProductVersion } | + Where-Object { $_ -isnot [System.IO.DirectoryInfo] } | + Select-Object -ExpandProperty VersionInfo | + Where-Object FileDescription -IEQ $InstallerDescription | + ForEach-Object { $_.FileVersionRaw } | Sort-Object -Descending | Select-Object -First 1 )" @@ -76,14 +39,11 @@ Param ( Import-Module -Verbose:$False -Force If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" -Verbose:$VerbosePreferenceBool } Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool - If (Test-InstallOutdated) { - Write-Verbose 'Current install is outdated or not installed...' - Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation - } + Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation -Verbose:$VerbosePreferenceBool Set-ChromiumVisualElementsManifest "$InstallLocation\chrome.VisualElementsManifest.xml" '#5F6368' Set-ChromiumShortcut $NameLocation Set-BatchRedirect 'blisk' $NameLocation - If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $InstallerVersion installation complete." } + If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $(Get-InstallerVersion) installation complete." } } Catch { } } diff --git a/dist.psm1 b/dist.psm1 index 32cc353..199d8e2 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -30,10 +30,13 @@ Function New-UpdaterScript { CompanyName = 'sangafabrice' Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." Description = $DevDependencies.Description - RequiredModules = @{ + RequiredModules = @(@{ + ModuleName = 'DownloadInfo' + ModuleVersion = '4.0.0' + },@{ ModuleName = 'RegCli' - ModuleVersion = '2.3.2' - } + ModuleVersion = '3.0.0' + }) ExternalModuleDependencies = 'RegCli' Tags = $DevDependencies.Tags LicenseUri = "$GithubRepo/blob/main/LICENSE.md" diff --git a/latest.json b/latest.json index 0eb67db..f24dadd 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "0.0.2", + "version": "1.0.0", "releaseNotes": [ - "Force the script to load RegCli 2.3.2" + "Force the script to load RegCli 3.0.0" ] } \ No newline at end of file From 3b0eaaf5ee49d05ef96982a6087e3716e5853432 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 20 Jul 2022 14:28:42 +0200 Subject: [PATCH 23/35] reduce updateinfo count comparison to implicit casting to bool --- Update.ps1 | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 20504e8..74a37d8 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -14,30 +14,15 @@ Param ( $NameLocation = "$InstallLocation\blisk.exe" $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' Write-Verbose 'Retrieve install or update information...' - $UpdateInfo = - Get-DownloadInfo -PropertyList @{} -From Blisk | - Where-Object { - @($_.Version,$_.Link) | - ForEach-Object { $_ -notin @($Null, '') } - } + $UpdateInfo = Get-DownloadInfo -PropertyList @{} -From Blisk | Select-NonEmptyObject $InstallerVersion = $UpdateInfo.Version $SoftwareName = 'Blisk' $InstallerDescription = "$SoftwareName Installer" - If ($UpdateInfo.Count -le 0) { - $InstallerVersion = "$( - Get-ChildItem $SaveTo | - Where-Object { $_ -isnot [System.IO.DirectoryInfo] } | - Select-Object -ExpandProperty VersionInfo | - Where-Object FileDescription -IEQ $InstallerDescription | - ForEach-Object { $_.FileVersionRaw } | - Sort-Object -Descending | - Select-Object -First 1 - )" - } + If (!$UpdateInfo) { $InstallerVersion = "$(Get-SavedInstallerVersion $SaveTo $InstallerDescription)" } Try { New-RegCliUpdate $NameLocation $SaveTo $InstallerVersion $InstallerDescription | Import-Module -Verbose:$False -Force - If ($UpdateInfo.Count -gt 0) { Start-InstallerDownload "$($UpdateInfo.Link)" -Verbose:$VerbosePreferenceBool } + $UpdateInfo | Start-InstallerDownload -Verbose:$VerbosePreferenceBool Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation -Verbose:$VerbosePreferenceBool Set-ChromiumVisualElementsManifest "$InstallLocation\chrome.VisualElementsManifest.xml" '#5F6368' From d259ec94073fdb3b4436e68ef082839fd75b5542 Mon Sep 17 00:00:00 2001 From: sangafabrice <69244030+sangafabrice@users.noreply.github.com> Date: Sat, 23 Jul 2022 21:55:28 +0200 Subject: [PATCH 24/35] update script manifest to include fix from RegCli --- dist.psm1 | 2 +- latest.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist.psm1 b/dist.psm1 index 199d8e2..7c922c4 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -35,7 +35,7 @@ Function New-UpdaterScript { ModuleVersion = '4.0.0' },@{ ModuleName = 'RegCli' - ModuleVersion = '3.0.0' + ModuleVersion = '3.0.1' }) ExternalModuleDependencies = 'RegCli' Tags = $DevDependencies.Tags diff --git a/latest.json b/latest.json index f24dadd..10ee3d8 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "1.0.0", + "version": "1.0.1", "releaseNotes": [ - "Force the script to load RegCli 3.0.0" + "Force the script to load RegCli 3.0.1" ] } \ No newline at end of file From f7709da1c3793ac94972180ef794271cfe58f2d7 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Fri, 12 Aug 2022 17:37:44 +0200 Subject: [PATCH 25/35] add common script --- Update.ps1 | 40 ++++++++++++++++++++++------------------ dist.psm1 | 2 +- latest.json | 6 ++++-- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 74a37d8..a2b873f 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -11,26 +11,30 @@ Param ( ) & { - $NameLocation = "$InstallLocation\blisk.exe" - $VerbosePreferenceBool = $VerbosePreference -ine 'SilentlyContinue' - Write-Verbose 'Retrieve install or update information...' - $UpdateInfo = Get-DownloadInfo -PropertyList @{} -From Blisk | Select-NonEmptyObject - $InstallerVersion = $UpdateInfo.Version - $SoftwareName = 'Blisk' - $InstallerDescription = "$SoftwareName Installer" - If (!$UpdateInfo) { $InstallerVersion = "$(Get-SavedInstallerVersion $SaveTo $InstallerDescription)" } Try { - New-RegCliUpdate $NameLocation $SaveTo $InstallerVersion $InstallerDescription | - Import-Module -Verbose:$False -Force - $UpdateInfo | Start-InstallerDownload -Verbose:$VerbosePreferenceBool - Remove-InstallerOutdated -Verbose:$VerbosePreferenceBool - Expand-ChromiumInstaller (Get-InstallerPath) $NameLocation -Verbose:$VerbosePreferenceBool - Set-ChromiumVisualElementsManifest "$InstallLocation\chrome.VisualElementsManifest.xml" '#5F6368' - Set-ChromiumShortcut $NameLocation - Set-BatchRedirect 'blisk' $NameLocation - If (!(Test-InstallOutdated)) { Write-Verbose "$SoftwareName $(Get-InstallerVersion) installation complete." } - } + $UpdateModule = + Import-CommonScript chrome-installer | + Import-Module -PassThru -Force -Verbose:$False + @{ + UpdateInfo = $( + Write-Verbose 'Retrieve install or update information...' + Get-DownloadInfo -PropertyList @{} -From Blisk | + Select-NonEmptyObject + ) + NameLocation = "$InstallLocation\blisk.exe" + SaveTo = $SaveTo + SoftwareName = 'Blisk' + InstallerDescription = 'Blisk Installer' + BatchRedirectName = 'blisk' + VisualElementManifest = @{ + BaseNameLocation = "$InstallLocation\chrome" + HexColor = '#5F6368' + } + Verbose = $VerbosePreference -ine 'SilentlyContinue' + } | ForEach-Object { Invoke-CommonScript @_ } + } Catch { } + Finally { $UpdateModule | Remove-Module -Verbose:$False } } <# diff --git a/dist.psm1 b/dist.psm1 index 7c922c4..f9c3db1 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -35,7 +35,7 @@ Function New-UpdaterScript { ModuleVersion = '4.0.0' },@{ ModuleName = 'RegCli' - ModuleVersion = '3.0.1' + ModuleVersion = '6.0.0' }) ExternalModuleDependencies = 'RegCli' Tags = $DevDependencies.Tags diff --git a/latest.json b/latest.json index 10ee3d8..c9bda1e 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,8 @@ { - "version": "1.0.1", + "version": "2.0.0", "releaseNotes": [ - "Force the script to load RegCli 3.0.1" + "Add removal of dynamic module.", + "Force to load RegCli version 6.0.0", + "Use common script." ] } \ No newline at end of file From 265a1bb7f4e2a4ed86d577a8214a20f008d13f20 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 17 Aug 2022 19:54:28 +0200 Subject: [PATCH 26/35] wrap downloadinfo command in try-catch. --- Update.ps1 | 7 ++++-- dist.psm1 | 69 ----------------------------------------------------- latest.json | 2 +- 3 files changed, 6 insertions(+), 72 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index a2b873f..53ff8cb 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -18,8 +18,11 @@ Param ( @{ UpdateInfo = $( Write-Verbose 'Retrieve install or update information...' - Get-DownloadInfo -PropertyList @{} -From Blisk | - Select-NonEmptyObject + Try { + Get-DownloadInfo -PropertyList @{} -From Blisk | + Select-NonEmptyObject + } + Catch { } ) NameLocation = "$InstallLocation\blisk.exe" SaveTo = $SaveTo diff --git a/dist.psm1 b/dist.psm1 index f9c3db1..9d31f38 100644 --- a/dist.psm1 +++ b/dist.psm1 @@ -5,73 +5,4 @@ $DevDependencies = @{ IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/58d15da2c7da327f3561e3c86884582d7e0db854/icon.png' Tags = @('blisk','chromium','update','browser') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' -} - -Function New-UpdaterScript { - <# - .SYNOPSIS - Create module manifest - .NOTES - Precondition: - 1. latest.json exists - #> - - $GithubRepo = $DevDependencies.RemoteRepo - $HeaderPath = '.\Header.ps1' - Push-Location $PSScriptRoot - Get-Content .\latest.json -Raw | - ConvertFrom-Json | - ForEach-Object { - @{ - Path = $HeaderPath - Version = $_.version - GUID = $DevDependencies.Guid - Author = 'Fabrice Sanga' - CompanyName = 'sangafabrice' - Copyright = "© $((Get-Date).Year) SangaFabrice. All rights reserved." - Description = $DevDependencies.Description - RequiredModules = @(@{ - ModuleName = 'DownloadInfo' - ModuleVersion = '4.0.0' - },@{ - ModuleName = 'RegCli' - ModuleVersion = '6.0.0' - }) - ExternalModuleDependencies = 'RegCli' - Tags = $DevDependencies.Tags - LicenseUri = "$GithubRepo/blob/main/LICENSE.md" - ProjectUri = "$GithubRepo/tree/$(git branch --show-current)" - IconUri = $DevDependencies.IconUri - ReleaseNotes = $_.releaseNotes - } - } | ForEach-Object { New-ScriptFileInfo @_ -Force } - ((Get-Content $HeaderPath).Where({$_ -like "`<`# "}, 'Until') + - (Get-Content .\Update.ps1)) -join "`n" | Out-String - Remove-Item $HeaderPath - Pop-Location -} - -Function Publish-UpdaterScript { - <# - .SYNOPSIS - Publish script to PSGallery - .NOTES - Precondition: - 1. The NUGET_API_KEY environment variable is set. - #> - - @{ - Path = "$PSScriptRoot\Update$($DevDependencies.ProgramName).ps1" | - ForEach-Object { - New-UpdaterScript | Out-File $_ - Return $_ - } - NuGetApiKey = $Env:NUGET_API_KEY - } | ForEach-Object { - Try { - Publish-Script @_ - Write-Host "$((Get-Item $_.Path).Name) published" - } Catch { } - Remove-Item $_.Path -Exclude Update.ps1 - } } \ No newline at end of file diff --git a/latest.json b/latest.json index c9bda1e..8b16ca1 100644 --- a/latest.json +++ b/latest.json @@ -1,5 +1,5 @@ { - "version": "2.0.0", + "version": "2.0.1", "releaseNotes": [ "Add removal of dynamic module.", "Force to load RegCli version 6.0.0", From c1b9784b2a94ccc93331a466d898f7130202d354 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 17 Aug 2022 19:54:58 +0200 Subject: [PATCH 27/35] wrap downloadinfo command in try-catch. --- dist.psm1 => dist | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dist.psm1 => dist (100%) diff --git a/dist.psm1 b/dist similarity index 100% rename from dist.psm1 rename to dist From 9c2533631281d61fc9ae4354f3438bca1411d49c Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 24 Aug 2022 17:06:49 +0200 Subject: [PATCH 28/35] force to load regcli 6.0.2 --- latest.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/latest.json b/latest.json index 8b16ca1..25d1380 100644 --- a/latest.json +++ b/latest.json @@ -1,8 +1,6 @@ { - "version": "2.0.1", + "version": "2.0.2", "releaseNotes": [ - "Add removal of dynamic module.", - "Force to load RegCli version 6.0.0", - "Use common script." + "Force to load RegCli version 6.0.2" ] } \ No newline at end of file From e23cb9c3dac9bd7a28541effff1e6bf96e16870a Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 6 Sep 2022 11:58:20 +0200 Subject: [PATCH 29/35] Force to load RegCli version 6.1.1 --- Update.ps1 | 4 ++-- latest.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 53ff8cb..c1fb507 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -64,7 +64,7 @@ Param ( PS > Get-ChildItem C:\ProgramData\Blisk | Select-Object Name Name ---- - 18.0.193.167 + 19.0.60.43 blisk.exe chrome.VisualElementsManifest.xml chrome_proxy.exe @@ -72,7 +72,7 @@ Param ( PS > Get-ChildItem | Select-Object Name Name ---- - 18.0.193.167.exe + blisk_19.0.60.43.exe UpdateBlisk.ps1 Install Blisk browser to 'C:\ProgramData\Blisk' and save its setup installer to the current directory. diff --git a/latest.json b/latest.json index 25d1380..ae15265 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "2.0.2", + "version": "2.0.3", "releaseNotes": [ - "Force to load RegCli version 6.0.2" + "Force to load RegCli version 6.1.1" ] } \ No newline at end of file From 76f789feab6510b0bf7f83639ee1777a524aade4 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Mon, 12 Sep 2022 04:41:10 +0200 Subject: [PATCH 30/35] remove batch redirect hashtable key --- Update.ps1 | 1 - latest.json | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index c1fb507..4f83da4 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -28,7 +28,6 @@ Param ( SaveTo = $SaveTo SoftwareName = 'Blisk' InstallerDescription = 'Blisk Installer' - BatchRedirectName = 'blisk' VisualElementManifest = @{ BaseNameLocation = "$InstallLocation\chrome" HexColor = '#5F6368' diff --git a/latest.json b/latest.json index ae15265..a961903 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "2.0.3", + "version": "2.0.4", "releaseNotes": [ - "Force to load RegCli version 6.1.1" + "Remove batch redirect hashtable key." ] } \ No newline at end of file From 5370bc48702010abd6963cd0515341f2a68b8ede Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 13 Sep 2022 05:44:26 +0200 Subject: [PATCH 31/35] Remove empty property list parameter from DownloadInfo command. --- Update.ps1 | 5 +---- latest.json | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index 4f83da4..d4317e6 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -18,10 +18,7 @@ Param ( @{ UpdateInfo = $( Write-Verbose 'Retrieve install or update information...' - Try { - Get-DownloadInfo -PropertyList @{} -From Blisk | - Select-NonEmptyObject - } + Try { Get-DownloadInfo -From Blisk | Select-NonEmptyObject } Catch { } ) NameLocation = "$InstallLocation\blisk.exe" diff --git a/latest.json b/latest.json index a961903..c0c7d3b 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "2.0.4", + "version": "2.0.5", "releaseNotes": [ - "Remove batch redirect hashtable key." + "Remove empty property list parameter from DownloadInfo command." ] } \ No newline at end of file From a5e89b2f7dc7a3358850b238e97032cc943093a2 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:15:57 +0200 Subject: [PATCH 32/35] Remove Select-NonEmptyObject from script. --- Update.ps1 | 2 +- latest.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index d4317e6..b208924 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -18,7 +18,7 @@ Param ( @{ UpdateInfo = $( Write-Verbose 'Retrieve install or update information...' - Try { Get-DownloadInfo -From Blisk | Select-NonEmptyObject } + Try { Get-DownloadInfo -From Blisk } Catch { } ) NameLocation = "$InstallLocation\blisk.exe" diff --git a/latest.json b/latest.json index c0c7d3b..7057140 100644 --- a/latest.json +++ b/latest.json @@ -1,6 +1,6 @@ { - "version": "2.0.5", + "version": "2.0.6", "releaseNotes": [ - "Remove empty property list parameter from DownloadInfo command." + "Remove Select-NonEmptyObject from script." ] } \ No newline at end of file From 30a6eeed2eb9e216acb3b85fce0157569b102afd Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Wed, 21 Sep 2022 18:45:59 +0200 Subject: [PATCH 33/35] increment updater script version --- latest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/latest.json b/latest.json index 7057140..b582188 100644 --- a/latest.json +++ b/latest.json @@ -1,5 +1,5 @@ { - "version": "2.0.6", + "version": "2.0.7", "releaseNotes": [ "Remove Select-NonEmptyObject from script." ] From 301db0958c4848f4708a6f735884e7974e1fbf19 Mon Sep 17 00:00:00 2001 From: Fabrice Sanga <69244030+sangafabrice@users.noreply.github.com> Date: Fri, 14 Oct 2022 08:59:41 +0200 Subject: [PATCH 34/35] initialize obs-studio updater script. --- Update.ps1 | 57 ++++++++++++++++++++++++++++++++-------------------- dist | 7 +++---- icon.png | Bin 2840 -> 42970 bytes latest.json | 4 ++-- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/Update.ps1 b/Update.ps1 index b208924..aec1eb8 100644 --- a/Update.ps1 +++ b/Update.ps1 @@ -3,7 +3,7 @@ Param ( [ValidateNotNullOrEmpty()] [ValidateScript({ Test-InstallLocation $_ $PSScriptRoot })] [string] - $InstallLocation = "${Env:ProgramData}\Blisk", + $InstallLocation = "${Env:ProgramData}\OBS-Studio", [ValidateNotNullOrEmpty()] [ValidateScript({ Test-InstallerLocation $_ })] [string] @@ -18,17 +18,20 @@ Param ( @{ UpdateInfo = $( Write-Verbose 'Retrieve install or update information...' - Try { Get-DownloadInfo -From Blisk } + Try { + Get-DownloadInfo -PropertyList @{ + RepositoryId = 'obsproject/obs-studio' + AssetPattern = 'Full\-Installer\-x64\.exe$' + } + } Catch { } ) - NameLocation = "$InstallLocation\blisk.exe" + InstallLocation = $InstallLocation + NameLocation = "$InstallLocation\bin\64bit\obs64.exe" SaveTo = $SaveTo - SoftwareName = 'Blisk' - InstallerDescription = 'Blisk Installer' - VisualElementManifest = @{ - BaseNameLocation = "$InstallLocation\chrome" - HexColor = '#5F6368' - } + SoftwareName = 'OBS Studio' + InstallerDescription = 'OBS Studio Installer' + InstallerType = 'BasicNSIS' Verbose = $VerbosePreference -ine 'SilentlyContinue' } | ForEach-Object { Invoke-CommonScript @_ } } @@ -38,38 +41,48 @@ Param ( <# .SYNOPSIS - Updates Blisk browser software. + Updates OBS Studio software. .DESCRIPTION - The script installs or updates Blisk browser on Windows. + The script installs or updates OBS Studio on Windows. .NOTES Required: at least Powershell Core 7. .PARAMETER InstallLocation Path to the installation directory. It is restricted to file system paths. It does not necessary exists. - It defaults to %ProgramData%\Blisk. + It defaults to %ProgramData%\OBS-Studio. .PARAMETER SaveTo Path to the directory of the downloaded installer. It is an existing file system path. It defaults to the script directory. .EXAMPLE - Get-ChildItem C:\ProgramData\Blisk -ErrorAction SilentlyContinue + Get-ChildItem C:\ProgramData\OBS-Studio -ErrorAction SilentlyContinue - PS > .\UpdateBlisk.ps1 -InstallLocation C:\ProgramData\Blisk -SaveTo . + PS > .\UpdateOBSStudio.ps1 -InstallLocation C:\ProgramData\OBS-Studio -SaveTo . - PS > Get-ChildItem C:\ProgramData\Blisk | Select-Object Name + PS > Get-ChildItem C:\ProgramData\OBS-Studio\bin\64bit | Where-Object Name -Like 'obs*' | Select-Object Name Name ---- - 19.0.60.43 - blisk.exe - chrome.VisualElementsManifest.xml - chrome_proxy.exe + obs-amf-test.exe + obs-amf-test.pdb + obs-ffmpeg-mux.exe + obs-ffmpeg-mux.pdb + obs-frontend-api.dll + obs-frontend-api.pdb + obs-scripting.dll + obs-scripting.pdb + obs.dll + obs.pdb + obs64.exe + obs64.pdb + obsglad.dll + obsglad.pdb PS > Get-ChildItem | Select-Object Name Name ---- - blisk_19.0.60.43.exe - UpdateBlisk.ps1 + obs_studio_28.0.3.exe + UpdateOBSStudio.ps1 - Install Blisk browser to 'C:\ProgramData\Blisk' and save its setup installer to the current directory. + Install OBS Studio to 'C:\ProgramData\OBS-Studio' and save its setup installer to the current directory. #> \ No newline at end of file diff --git a/dist b/dist index 9d31f38..0f95844 100644 --- a/dist +++ b/dist @@ -1,8 +1,7 @@ $DevDependencies = @{ - ProgramName = 'Blisk' - Description = 'The script installs or updates Blisk browser on Windows.' - Guid = '0f0234b8-2357-4909-a0b2-094a02e96be4' + ProgramName = 'OBSStudio' + Guid = '83aaba0b-e315-4397-8b40-74012f9f6e1a' IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/58d15da2c7da327f3561e3c86884582d7e0db854/icon.png' - Tags = @('blisk','chromium','update','browser') + Tags = @('obs-studio','nsis','update','video-recording','live-streaming') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } \ No newline at end of file diff --git a/icon.png b/icon.png index 50b56a4530b44761da74cfbc57d1cb189358a8ce..53557180000231f5cba5126a28ac3090af9409d9 100644 GIT binary patch literal 42970 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
  • }Dydq}`!M8fE?M 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 z%0A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 Date: Fri, 14 Oct 2022 09:03:20 +0200 Subject: [PATCH 35/35] update logo icon. --- dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist b/dist index 0f95844..1a1ecc7 100644 --- a/dist +++ b/dist @@ -1,7 +1,7 @@ $DevDependencies = @{ ProgramName = 'OBSStudio' Guid = '83aaba0b-e315-4397-8b40-74012f9f6e1a' - IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/58d15da2c7da327f3561e3c86884582d7e0db854/icon.png' + IconUri = 'https://rawcdn.githack.com/sangafabrice/reg-cli/301db0958c4848f4708a6f735884e7974e1fbf19/icon.png' Tags = @('obs-studio','nsis','update','video-recording','live-streaming') RemoteRepo = (git ls-remote --get-url) -replace '\.git$' } \ No newline at end of file