How to install module in Powow Shill

Current Version:

$moduleCommand='New-SSHSession'
$moduleName='Posh-SSH'
if(!(get-command $moduleCommand -ea Ignore)){
    write-host "Installing $moduleName..."
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    if(!(get-packageprovider nuget)){
        $null=Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction SilentlyContinue
        # Preempt this Nuget installation prompt for user-input
        # NuGet provider is required to continue
        # PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
        # provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
        # 'C:\Users\kdoan\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
        # 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and
        # import the NuGet provider now?
        # [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):  
    }        
    try{
        $null=Install-Module -Name $moduleName -Force -EA SilentlyContinue
    }catch{
        $null=Register-PSRepository -Default
        $null=Install-Module -Name $moduleName -Force -EA SilentlyContinue
        # Error caused by PSRepository being untrusted
        # PackageManagement\Install-Package : No match was found for the specified search criteria and module name 'Posh-SSH'. Try Get-PSRepository to see all available
        # registered module repositories.
        # At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 char:21
        # + ...          $null = PackageManagement\Install-Package @PSBoundParameters
        # +                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        #     + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
        #     + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
        # The fix:
        # Set-executionPolicy bypass
        # Register-PSRepository -Default
    }
    refreshenv
    if(!(get-command $moduleCommand -ea Ignore)){
        write-warning "$moduleName is still NOT available on $env:computername"
        return $False
    }
}
# Michael Shoff has recently enforced TLS1.2
# Assuming that the error above is unrelated to Proxy and outbound firewall restrictions
# Here's the the solution: set PowerShell to default to TLS1.2 in current session as well as fixing it in the registry for next sessions
# Requirement: PowerShell session is running in the Administrator context

# Set module name
$moduleName='SqlServer'
# Install module if it's not already available  
if(!(Get-Module -ListAvailable -Name $moduleName -ea SilentlyContinue)){
    if(!('NuGet' -in (get-packageprovider).Name)){    
        try{
            Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction SilentlyContinue;
            }
        catch{
            Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
            Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
            [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
            Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction SilentlyContinue;
            }            
        }
    Install-Module -Name $moduleName -Force -Confirm:$false
    }
# Sample output:
#Name                           Version          Source           Summary
#----                           -------          ------           -------
#nuget                          2.8.5.208        https://onege... NuGet provider for the OneGet meta-package manager
Original gibberish to be avoided:
#PS C:\Windows\system32> Install-Module -Name WinSCP
#PackageManagement\Install-Package : No match was found for the specified search criteria and module name 'WinSCP'. Try
#Get-PSRepository to see all available registered module repositories.
#At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 char:21
#+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
#+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Ex
#   ception
#    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

#Install-Module PackageManagement -Force -Repository PSGallery
#PackageManagement\Get-PackageSource : Unable to find repository 'PSGallery'. Use Get-PSRepository to see all available repositories.
#At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:4451 char:35
#+ ... ckageSources = PackageManagement\Get-PackageSource @PSBoundParameters
#+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...etPackageSource:GetPackageSource) [Get-PackageSource], Exception
#    + FullyQualifiedErrorId : SourceNotFound,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackageSource

#PS C:\Windows\system32> Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Verbose -Force
#VERBOSE: Using the provider 'Bootstrap' for searching packages.
#VERBOSE: Finding the package 'Bootstrap::FindPackage' 'NuGet','','2.8.5.201','''.
#WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
#VERBOSE: Cannot download link 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409', retrying for '2' more times.
#VERBOSE: Cannot download link 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409', retrying for '1' more times.
#VERBOSE: Cannot download link 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409', retrying for '0' more times.
#WARNING: Unable to download the list of available providers. Check your internet connection.
#Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags.
#Please check if the specified package has the tags.
#At line:1 char:1
#+ Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Verbos ...
#+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-PackageProvider], Exception
#    + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackageProvider

#The cause: this machine has applied protocol/cipher suite hardening
#The solution: configure the PS Session to use TLS 1.2

#PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
#PS C:\Windows\system32> Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Verbose -Force
#VERBOSE: Using the provider 'Bootstrap' for searching packages.
#VERBOSE: Finding the package 'Bootstrap::FindPackage' 'NuGet','','2.8.5.201','''.
#VERBOSE: Performing the operation "Install Package" on target "Package 'nuget' version '2.8.5.208' from
#'https://onegetcdn.azureedge.net/providers/nuget-2.8.5.208.package.swidtag'.".
#VERBOSE: Installing the package 'https://onegetcdn.azureedge.net/providers/nuget-2.8.5.208.package.swidtag'.
#VERBOSE: Installed the package 'nuget' to 'C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208\Microsoft.PackageManagement.NuGetProvider.dll'.
#VERBOSE: Skipping previously processed provider 'NuGet'.
#
#Name                           Version          Source           Summary
#----                           -------          ------           -------
#nuget                          2.8.5.208        https://onege... NuGet provider for the OneGet meta-package manager
#VERBOSE: Importing the package provider NuGet
#VERBOSE: The provider 'NuGet' has already been imported. Trying to import it again.
#VERBOSE: Importing package provider 'NuGet'.
#VERBOSE: Imported provider 'C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208\Microsoft.PackageManagement.NuGetProvider.dll' .
#WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
#WARNING: Unable to download the list of available providers. Check your internet connection.
#
#NuGet provider is required to continue
#PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGe
# provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
#'C:\Users\concu\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider b
# running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install
#and import the NuGet provider now?
#[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
#WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
#WARNING: Unable to download the list of available providers. Check your internet connection.
#PackageManagement\Install-PackageProvider : No match was found for the specified search criteria for the provider
#'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package
#has the tags.
#At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7405 char:21
#+ ...     $null = PackageManagement\Install-PackageProvider -Name $script:N ...
#+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
#   kageProvider], Exception
#    + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
#   vider
#
#PackageManagement\Import-PackageProvider : No match was found for the specified search criteria and provider name
#'NuGet'. Try 'Get-PackageProvider -ListAvailable' to see if the provider exists on the system.
#At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7411 char:21
#+ ...     $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
#+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : InvalidData: (NuGet:String) [Import-PackageProvider], Exception
#    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
#   ider
#
#WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
#WARNING: Unable to download the list of available providers. Check your internet connection.
#PackageManagement\Get-PackageProvider : Unable to find package provider 'NuGet'. It may not be imported yet. Try
#'Get-PackageProvider -ListAvailable'.
#At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7415 char:30
#+ ... tProvider = PackageManagement\Get-PackageProvider -Name $script:NuGet ...
#+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...PackageProvider:GetPackageProvider) [Get-PackageProvi
#   der], Exception
#    + FullyQualifiedErrorId : UnknownProviderFromActivatedList,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPacka
#   geProvider
#
#Install-Module : NuGet provider is required to interact with NuGet-based repositories. Please ensure that '2.8.5.201'
#or newer version of NuGet provider is installed.
#At line:7 char:9
#+         Install-Module -Name SqlServer -Force -Confirm:$false
#+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : InvalidOperation: (:) [Install-Module], InvalidOperationException
#    + FullyQualifiedErrorId : CouldNotInstallNuGetProvider,Install-Module
#
#Get-SqlDatabase : The term 'Get-SqlDatabase' is not recognized as the name of a cmdlet, function, script file, or
#operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
#again.
#At line:11 char:18
#+     $sqlInstance=Get-SqlDatabase -ServerInstance $sqlServer
#+                  ~~~~~~~~~~~~~~~
#    + CategoryInfo          : ObjectNotFound: (Get-SqlDatabase:String) [], CommandNotFoundException
#    + FullyQualifiedErrorId : CommandNotFoundException
#
#Restore-SqlDatabase : The term 'Restore-SqlDatabase' is not recognized as the name of a cmdlet, function, script file,
#or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and
#try again.
#At line:13 char:5
#+     Restore-SqlDatabase -ServerInstance $sqlInstance -Database "$OrgN ...
#+     ~~~~~~~~~~~~~~~~~~~
#    + CategoryInfo          : ObjectNotFound: (Restore-SqlDatabase:String) [], CommandNotFoundException
#    + FullyQualifiedErrorId : CommandNotFoundException