Sandybox.psm1
# Implement your module commands in this script. Function Connect-SandyOnline () { [CmdletBinding(DefaultParameterSetName = 'Interactive')] param ( [Parameter( ParameterSetName = 'force', Mandatory, ValueFromPipelineByPropertyName, Position = 0)] [Parameter(Mandatory = $True, ParameterSetName = 'Interactive', Position = 0, HelpMessage = "Please enter your favorite color")] [string]$FavoriteColor, [Parameter( ParameterSetName = 'force')] [Switch] $force ) begin { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $GitHubModuleInfoURL = 'https://github.com/scottd3v/PlayGround/blob/master/Sandybox/ModuleBanner.md' #Update this $ReleaseNotesURL = 'https://github.com/scottd3v/PlayGround/blob/master/Sandybox/ModuleChangelog.md' #Update this } process { } end { if ($PSCmdlet.ParameterSetName -eq 'Interactive') { Write-Host -BackgroundColor Green -ForegroundColor Black "Successfully connected to Sandybox" $GitHubModuleInfo = Invoke-WebRequest -uri $GitHubModuleInfoURL -UseBasicParsing | Select-Object RawContent $CurrentBanner = ((((($GitHubModuleInfo -split "</a>Banner Current</h4>")[1]) -split "<pre><code>")[1]) -split "`n")[0] $OldBanner = ((((($GitHubModuleInfo -split "</a>Banner Old</h4>")[1]) -split "<pre><code>")[1]) -split "`n")[0] $LatestVersion = ((((($GitHubModuleInfo -split "</a>Latest Version</h4>")[1]) -split "<pre><code>")[1]) -split "`n")[0] $InstalledModuleVersion = Get-InstalledModule -Name Sandybox | Select-Object -ExpandProperty Version if ($InstalledModuleVersion -eq $LatestVersion) { Write-Host -BackgroundColor Green -ForegroundColor Black "$CurrentBanner Module version: $InstalledModuleVersion" } elseif ($InstalledModuleVersion -ne $LatestVersion) { Write-Host "$OldBanner" Write-Host -BackgroundColor Yellow -ForegroundColor Black "Installed Version: $InstalledModuleVersion " -NoNewline Write-Host -BackgroundColor Green -ForegroundColor Black " Latest Version: $LatestVersion " Write-Host "`nWould you like to upgrade to version: $LatestVersion ?" $Accept = Read-Host "`nEnter 'Y' if you wish to update to version $LatestVersion or 'N' to continue using version: $InstalledModuleVersion" if ($Accept -eq 'N') { return #Exit the function } While ($Accept -notcontains 'Y') { write-warning " Typo? $Accept != 'Y'" $Accept = Read-Host "`nEnter 'Y' if you wish to update to the latest version or 'N' to continue using version: $InstalledModuleVersion `n" if ($Accept -eq 'N') { return # Exist the function } } if ($PSVersionTable.PSVersion.Major -eq '5') { If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "You must have Administrative rights to update the module! To retry close this PowerShell session and open a new PowerShell session with Administrator permissions (Right click the PowerShell application and select 'Run as Administrator') and run the Connect-JCOnline command." Return } Uninstall-Module -Name Sandybox -RequiredVersion $InstalledModuleVersion Install-Module -Name Sandybox -Scope CurrentUser } elseif ($PSVersionTable.PSVersion.Major -ge 6) { if ($PSVersionTable.Platform -eq 'Unix') { Uninstall-Module -Name Sandybox -RequiredVersion $InstalledModuleVersion Install-Module -Name Sandybox -Scope CurrentUser } elseif ($PSVersionTable.Platform -like "*Win*") { If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "You must have Administrative rights to update the module! To retry close this PowerShell session and open a new PowerShell session with Administrator permissions (Right click the PowerShell application and select 'Run as Administrator') and run the Connect-JCOnline command." Return } Uninstall-Module -Name Sandybox -RequiredVersion $InstalledModuleVersion Install-Module -Name Sandybox -Scope CurrentUser } } $UpdatedModuleVersion = Get-InstalledModule -Name Sandybox | Select-Object -ExpandProperty Version if ($UpdatedModuleVersion -eq $LatestVersion) { Clear-Host $ReleaseNotesRaw = Invoke-WebRequest -uri $ReleaseNotesURL -UseBasicParsing #for backwards compatibility $ReleaseNotes = ((((($ReleaseNotesRaw.RawContent -split "</a>$LatestVersion</h2>")[1]) -split "<pre><code>")[1]) -split "</code>")[0] Write-Host "Module updated to version: $LatestVersion`n" Write-Host "Release Notes: `n" Write-Host $ReleaseNotes Write-Host "`nTo see the full release notes navigate to: `n" Write-Host "$ReleaseNotesURL`n" Pause } } } #End if }#End endblock } function Get-Sandy { [CmdletBinding()] param ( ) begin { Connect-SandyOnline } process { } end { } } # Export only the functions using PowerShell standard verb-noun naming. # Be sure to list each exported functions in the FunctionsToExport field of the module manifest file. # This improves performance of command discovery in PowerShell. Export-ModuleMember -Function Connect-SandyOnline, Get-Sandy |