Update-BePowerShellContent.ps1

function Update-BePowerShellContent {
  <#
      .SYNOPSIS
      First Testfunction
     
      .DESCRIPTION
      Mit dieser Funktion werden die Daten von BePowershell geholt. Hierbei wird ein Merge ausgeführt.
      Es ist zwingend notwendig das ein Azure-Account für den Datenspeicher verwendet wird.
     
      .INPUTS
      String
      String
     
      .OUTPUTS
      None
     
      .EXAMPLE
      Get-BePowerShellContent
     
      Ausgabe
      Ausgabe
 
      .EXAMPLE
      Get-BePowerShellContent
 
      Ausgabe
      Ausgabe
 
      .NOTES
     
  #>

  [CmdletBinding()]

  param(
    #Pfad zum Speicherort für die abzulegenden Daten
    [Parameter(Mandatory = $false)]
    $Path = $BePowershellLocalPath,
    #Containername aus welchem Quelldateien kopiert werden
    [Parameter(Mandatory = $false)]
    [string]$BlobContainerName = 'master',
    #Dieser Schalter erzwingt die neueingabe von Benutzerdaten bei der Anmeldung an Azure
    [Parameter(Mandatory = $false)]
    [switch]$ForceConnection,
    #Dieser Schalter deaktviert das automatische Eintragen des Download-Ziels in $env:PsModulePath
    [Parameter(Mandatory = $false)]
    [switch]$NoProfileModification,
    #Mit diesem Parameter lassen sich einzelne Dateien aus einem Blob-Storage-Container herunterladen (anstatt des gesamten Containers)
    [Parameter(Mandatory = $false)]
    [string[]]$FileName,
    #switch for system wide installation
    [Parameter(Mandatory = $false)]
    [switch]$ToSystem
  )

  Begin {
    if (!(get-module Az.Storage -ListAvailable))
    { Start-Process PowerShell.exe -Verb runas -ArgumentList '-Command "& { Install-Module Az -AllowClobber -Force -Verbose ; Write-Host done ; Start-Sleep -Seconds 5 ; exit }"' -Wait }

    if (!$ToSystem)
    { $PsPath = $Path.TrimEnd("\") }
    else 
    { $PsPath = "$env:windir\System32\WindowsPowershell\v1.0\Modules\" }
  }
  
  Process {
    if (!$ConnectionAzAccount -or $ForceConnection) {
      if (!$AzTenantId_BeTerna -or !$AzSubscriptionId_BeTerna) {
        if (Get-Module -ListAvailable BeAzure -ErrorAction SilentlyContinue) {
          Import-Module BeAzure -DisableNameChecking -WarningAction SilentlyContinue
          $global:AzTenantId_BeTerna = $AzureEnvironment["be-terna"].TenantId
          $global:AzSubscriptionId_BeTerna = $AzureEnvironment["be-terna"].SubscriptionId
        }
        else {
          $global:AzTenantId_BeTerna = Read-Host -Prompt "enter BE-terna Azure Tenant ID"
          $global:AzSubscriptionId_BeTerna = Read-Host -Prompt "enter BE-terna Azure Subscription ID"
        } 
      }
      $global:ConnectionAzAccount = Connect-AzAccount -TenantId $global:AzTenantId_BeTerna -Subscription $global:AzSubscriptionId_BeTerna
    }

    if ($ConnectionAzAccount) {
      $StorageAcc = Get-AzStorageAccount -ResourceGroupName $global:AzResGrpName_StorageBlob -Name $global:AzStorageAccountName 
      $StorageContext = $StorageAcc.Context 
      $StorageContainer = Get-AzStorageContainer -Context $StorageContext | Where-Object -FilterScript { $_.Name -eq $BlobContainerName }
      $Blobs = Get-AzStorageBlob -Container $StorageContainer.Name -Context $StorageContext
    
      if ($Blobs -and !$ToSystem)
      { $null = Remove-Item $PsPath -Recurse -Force }

      foreach ($Blob in $Blobs) {
        $DestPath = Join-Path -Path $PsPath -ChildPath ($Blob.Name)
        $null = New-Item ($DestPath) -ItemType File -Force
        
        if ($FileName) {
          if ($FileName -contains (($Blob.Name.split("/")[-1])))
          { Get-AzStorageBlobContent -Blob $Blob.Name -Container $StorageContainer.Name -Context $StorageContext -Destination $DestPath -Force }
          else
          { continue }
        }
        else
        { Get-AzStorageBlobContent -Blob $Blob.Name -Container $StorageContainer.Name -Context $StorageContext -Destination $DestPath -Force }
      }

      if (!$NoProfileModification) {
        $ModulePaths = $env:PSModulePath.split(';')
        if ($ModulePaths -notcontains $PsPath -and !$ToSystem) {         
          $Command = {
            $PsPath = $args[0]

            $originalpaths = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath).PSModulePath
            $newPath = ($originalpaths + ';' + $PsPath)
            Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath -Value $newPath
          }
        
          Start-Process powershell -verb runas -ArgumentList (' -Command "& {' + $Command + '}" '), $PsPath
        }
      }  
    }
  }  

  End {
    Write-Output -InputObject $PsPath
    Get-Module BeHub | Where-Object { $_.Path -ne "$env:USERPROFILE\Documents\BePowerShell\BeHub\loader.psm1" } | Uninstall-Module -Force -ErrorAction SilentlyContinue
  }
}

# SIG # Begin signature block
# MIIP/gYJKoZIhvcNAQcCoIIP7zCCD+sCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUJ5AAN1tU7Q559M7/1TYptcko
# pmuggg1VMIIGgTCCBGmgAwIBAgITZQAAAAshjJ4TrsC61QAAAAAACzANBgkqhkiG
# 9w0BAQsFADBCMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFTATBgoJkiaJk/IsZAEZ
# FgV0ZXJuYTESMBAGA1UEAxMJVFJOUk9PVENBMB4XDTE3MDkwNDEzMTIwMFoXDTI3
# MDkwNDEzMjIwMFowWzETMBEGCgmSJomT8ixkARkWA2NvbTEYMBYGCgmSJomT8ixk
# ARkWCGJlLXRlcm5hMRQwEgYKCZImiZPyLGQBGRYEY29ycDEUMBIGA1UEAxMLQkUt
# dGVybmEtQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDs/keeRFkb
# 5gpRrxtgP7Gikp6q1460/7Rzt7b8eGrzGSy6QzJB2aD7bZ8dj/b9DdNiAG/PJ/Yy
# m935OGjV6Tdu01SLkq2I9pw+ydpb+HDHaYt10CTM+5d6sCpptFa7+oNTnIB5L84y
# vv1TYEEWt65dO/4ECTEExwZ+h0AV9QDQN8KfQ14POFY/b3m9JfwByK9ajxTTebT9
# oNbh3u7VOUaVDVWEGN6DlAc323G7MgrjrU41RVPUMQAgJTS0XasqaAq+SEaKzM3c
# CBB5XKUmdE2upg9VlvYB1VC3pVT2YYqbEFR7osZgbkoJkrOabsXLL8KKg16uq65r
# zTSOyDfRu7olAgMBAAGjggJVMIICUTASBgkrBgEEAYI3FQEEBQIDAwADMCMGCSsG
# AQQBgjcVAgQWBBQLk1/35PxB+Ojjv78gTbmPxXI2rTAdBgNVHQ4EFgQUiLx4Z/Xr
# rg/SZ68evLTX9YeO+4wwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0P
# BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULtzBQVWpM0QmWgyC
# MaFEn18ikeYwgcQGA1UdHwSBvDCBuTCBtqCBs6CBsIYxaHR0cDovL2liY20uYmUt
# dGVybmEuY29tL0NlcnRFbnJvbGwvVFJOUk9PVENBLmNybIZ7bGRhcDovLy9DTj1U
# Uk5ST09UQ0EsQ049VFJOUk9PVENBLENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBT
# ZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWNvcnAsREM9
# YmUtdGVybmEsREM9Y29tMIHVBggrBgEFBQcBAQSByDCBxTBHBggrBgEFBQcwAoY7
# aHR0cDovL2liY20uYmUtdGVybmEuY29tL0NlcnRFbnJvbGwvVFJOUk9PVENBX1RS
# TlJPT1RDQS5jcnQwegYIKwYBBQUHMAKGbmxkYXA6Ly8vQ049VFJOUk9PVENBLENO
# PUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1D
# b25maWd1cmF0aW9uLERDPWNvcnAsREM9YmUtdGVybmEsREM9Y29tMA0GCSqGSIb3
# DQEBCwUAA4ICAQCBAi/Ux7oFuWHxXc2x5qYU8TmNByWWOTvGgPkV/1puUaVWtnMa
# oVOoMdecrSYc7eRiUQI0yZBejvZkgJQq61HvNRQocw+OCAatwmHZRSVR+PYf5lAz
# DCZRF2Aa/h0oFRUr9t9+JMMy9HaealHSReUBZek0lVzC1TrtLK2Ol5u7seWNNqOg
# 2H553vA5So2ObkKVqlRRinkKNCraD6FRWYxEZK+VSiHd54QxP79CjiOFFQ96lx8Z
# pSifHQYIbKcULxvxKvkoI/jgoHKnpkLmi3PpMSbVlZLLpM94ox0jJfyNv2g4hq+A
# iTiCa5lAYhJk2vUfzvz69UZYdMJ1YIAaQ3pcAeFAdxdgt8H5AooJP7qKe6xYqN3G
# W8Hx5hTCceo4m6HlTiDuKDFTJMUyTvXdPQ0INWfQlQaBOiJsFRgaiZI7fV0bVAiS
# cuI8pOYkUp3QWy1iPwyEiGhGmrHSlL5IdGTMgpHRyW2yREhVQ2cx+r7JpE9V29Tw
# 7PJgh/awoQ8ayLXqBm6Z9rPh3rgIyo4yq7iS84mxzeCxUHEqRxcFhghepO9qLlil
# cLkScC4tH77i8DRvakwdu+rz+9qWAkARZit6ZkMHMtxVUvGTXRe4XYCJKT6/Uh9N
# jYcBtYLoynsTUY+bRqXmFyF7PbakBaMcGjiUaeRzvXwXQ1YCt6NH9S7TKzCCBsww
# ggW0oAMCAQICE3EAAC9Jj/4Vd7NbrzcAAwAAL0kwDQYJKoZIhvcNAQELBQAwWzET
# MBEGCgmSJomT8ixkARkWA2NvbTEYMBYGCgmSJomT8ixkARkWCGJlLXRlcm5hMRQw
# EgYKCZImiZPyLGQBGRYEY29ycDEUMBIGA1UEAxMLQkUtdGVybmEtQ0EwHhcNMjAw
# MjI4MDg0ODAwWhcNMjUwMjI2MDg0ODAwWjCBoTETMBEGCgmSJomT8ixkARkWA2Nv
# bTEYMBYGCgmSJomT8ixkARkWCGJlLXRlcm5hMRQwEgYKCZImiZPyLGQBGRYEY29y
# cDERMA8GA1UECxMIQkUtdGVybmExDjAMBgNVBAsTBVVzZXJzMQswCQYDVQQLEwJE
# RTEPMA0GA1UECxMGRXJmdXJ0MRkwFwYDVQQDExBTaWViZXJ0LCBNYXRoaWFzMIIB
# IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnDzEixzGjhbo+LA+MhVI/dGg
# Hf0yTdhFzhUJ0tYsjQkYlc1y1HvDt+HSAoiv/BmXv+BTu3cSEWILAwUaa09YgeFh
# juuEXzZz6fLveDEJkxtR61I+6MY1piavFk3YtCCO2O24rhTh5q5C6uUntZop4k6q
# IVJfetT4wG4vf8OCwvr824TLQO+LcT9dmvLw09/oAmNKjEH1MDYgB3CX+AUtewoY
# blcNcYWRykj5EDiiqRFPRtxRTENNOjxZLSm2YKN47eO/b8tElk5d7/duzfLKLsh4
# noX58B9kWW3R+vKOE9GX1I+raLw0wET4+OaKq9rUEeoj5gHU5CeVI8ofJwO7yQID
# AQABo4IDQDCCAzwwOwYJKwYBBAGCNxUHBC4wLAYkKwYBBAGCNxUIhL2LcYK9jn/t
# ny+Ei6ZhhKTucXf1iTCG14F6AgFkAgEHMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA4G
# A1UdDwEB/wQEAwIHgDAbBgkrBgEEAYI3FQoEDjAMMAoGCCsGAQUFBwMDMB0GA1Ud
# DgQWBBS8/e5oHP1ZWV7+jwVsI0+edsYhXDAfBgNVHSMEGDAWgBSIvHhn9euuD9Jn
# rx68tNf1h477jDCCARMGA1UdHwSCAQowggEGMIIBAqCB/6CB/IaBwWxkYXA6Ly8v
# Q049QkUtdGVybmEtQ0EoMyksQ049QkVUSUJLQ0EwMSxDTj1DRFAsQ049UHVibGlj
# JTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlvbixE
# Qz1jb3JwLERDPWJlLXRlcm5hLERDPWNvbT9jZXJ0aWZpY2F0ZVJldm9jYXRpb25M
# aXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSGNmh0dHA6
# Ly9pYmNtLmJlLXRlcm5hLmNvbS9DZXJ0RW5yb2xsL0JFLXRlcm5hLUNBKDMpLmNy
# bDCCASkGCCsGAQUFBwEBBIIBGzCCARcwgbMGCCsGAQUFBzAChoGmbGRhcDovLy9D
# Tj1CRS10ZXJuYS1DQSxDTj1BSUEsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMs
# Q049U2VydmljZXMsQ049Q29uZmlndXJhdGlvbixEQz1jb3JwLERDPWJlLXRlcm5h
# LERDPWNvbT9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlmaWNh
# dGlvbkF1dGhvcml0eTBfBggrBgEFBQcwAoZTaHR0cDovL2liY20uYmUtdGVybmEu
# Y29tL0NlcnRFbnJvbGwvQkVUSUJLQ0EwMS5jb3JwLmJlLXRlcm5hLmNvbV9CRS10
# ZXJuYS1DQSgzKS5jcnQwNwYDVR0RBDAwLqAsBgorBgEEAYI3FAIDoB4MHG1hdGhp
# YXMuc2llYmVydEBiZS10ZXJuYS5jb20wDQYJKoZIhvcNAQELBQADggEBAH61MBSW
# PoK3Qxb/yXW9Qvftp8VtiawgNktsU2GTLD33IR6k7pb+Q2vkScNRfotLDrniDoj5
# WmEudoO6Z3SZfCQepWzMTKYFJPe5ml8nCAbVPVBn+W1DN0+x1bZLolZyG0PUzISF
# yw1LrmGwp3SFvgDCOGhiTH2Syh5iYUMmVjg7fahK9zC/z66KRzPkrJrAjuxP1Yr3
# 4KhHfhsGbaTBw6Bj21GkY0ewEnitEFOwnE2NAfaON+uHamkusf3oga4NrvFOnMlC
# vXXGvUsYnT4ES5LtzZyytmaziRXOfTsmQ67qnqsZwYGXS5VpI/vWuC5xTiHdQIWp
# +MYoFxVo83D98i4xggITMIICDwIBATByMFsxEzARBgoJkiaJk/IsZAEZFgNjb20x
# GDAWBgoJkiaJk/IsZAEZFghiZS10ZXJuYTEUMBIGCgmSJomT8ixkARkWBGNvcnAx
# FDASBgNVBAMTC0JFLXRlcm5hLUNBAhNxAAAvSY/+FXezW683AAMAAC9JMAkGBSsO
# AwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEM
# BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqG
# SIb3DQEJBDEWBBSUiPIPEDM1KGWmyhNEhTKjW/zoqzANBgkqhkiG9w0BAQEFAASC
# AQATv/ULwo342E+dkPLBe6J63JbtiwlPsvgmXHC022aJpYusV4maEIljDHVv4UkV
# 0eYH6jljbm/6C0F9i135q+wRgdrgLqfpBeAxlFr03LO2xqYe6+XBLUZc4eVd7aWo
# SlgLpNFUuTfZx8ZYTqXpIpay+91RwoCV+45Jhi8k8YMQM5opIreDDdd8f+GCzMv6
# Stg0RXKF4D58e5U0eaWSsUYEUh3/7df5mTOvuRwzQBcfJKuXD0Iww+tXPUMWrYLM
# w7zrxyDfOwKQqqSQEQBRKwfXuVXpW6FpKV3BjWEKYqBr6RyppACsDj2Io5KMsPKh
# VpCtcvlZlGZZSx/0Qfx+cJxy
# SIG # End signature block