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(
    #Dieser Schalter ermöglicht eine alternative Authentifizierung bei Azure
    [Parameter(Mandatory = $false)]
    [switch]$AlternativeAuthentication,  
    #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"
        } 
      }
      if ($AlternativeAuthentication) {
        $MyCredential = Get-Credential
        $global:ConnectionAzAccount = Connect-AzAccount -TenantId $global:AzTenantId_BeTerna -Subscription $global:AzSubscriptionId_BeTerna -Credential $MyCredential
      } else {
        $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
# MIIQSgYJKoZIhvcNAQcCoIIQOzCCEDcCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUW5i0g5Q6/UIF3LMQZAzwNrkU
# sKuggg2hMIIGgTCCBGmgAwIBAgITZQAAAAshjJ4TrsC61QAAAAAACzANBgkqhkiG
# 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+bRqXmFyF7PbakBaMcGjiUaeRzvXwXQ1YCt6NH9S7TKzCCBxgw
# ggYAoAMCAQICE3EAAZHHuffRX7prFsYAAwABkccwDQYJKoZIhvcNAQELBQAwWzET
# MBEGCgmSJomT8ixkARkWA2NvbTEYMBYGCgmSJomT8ixkARkWCGJlLXRlcm5hMRQw
# EgYKCZImiZPyLGQBGRYEY29ycDEUMBIGA1UEAxMLQkUtdGVybmEtQ0EwHhcNMjQw
# NDI0MTIyMzE4WhcNMjcwOTA0MTMyMjAwWjCBnzETMBEGCgmSJomT8ixkARkWA2Nv
# bTEYMBYGCgmSJomT8ixkARkWCGJlLXRlcm5hMRQwEgYKCZImiZPyLGQBGRYEY29y
# cDERMA8GA1UECxMIQkUtdGVybmExDjAMBgNVBAsTBVVzZXJzMQswCQYDVQQLEwJE
# RTEQMA4GA1UECxMHTGVpcHppZzEWMBQGA1UEAxMNQmFzdGlhbiBLbm9vcDCCASIw
# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSLp7tVuyW1rtM2163e6iRZrlsk
# oQXvRClSn9b9kuLJPLvIzUj9f2kjQMdI0JcolhCydQxHg5V0TXLvPE1H64X5wi9p
# Zrr1mL4oe3sJ9q7MV3oY1oKEOQ+MVSykVoWPXpNM5tO3rYCfXXHzsbiX9b+AT94m
# oYb3kbmyRNGK3eem0bkX9bj2D6nVDOg0MDRyp+grFyZtE+LMHptnmeE/Qxk5dylr
# 4xJ5HXFYMS1AjpRCcLkl6lQHFYYr4h7j5sgfYHqbo/uQ3cUU1Ms3bVXJl1wgti6A
# PXjfXq3b8vcHzi1KZlHainUEfenAXEwuMn3Ckw+BIhj/lxbABRSuJpKLXK0CAwEA
# AaOCA44wggOKMDsGCSsGAQQBgjcVBwQuMCwGJCsGAQQBgjcVCIS9i3GCvY5/7Z8v
# hIumYYSk7nF39YkwhteBegIBZAIBEDATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNV
# HQ8BAf8EBAMCB4AwGwYJKwYBBAGCNxUKBA4wDDAKBggrBgEFBQcDAzAdBgNVHQ4E
# FgQUcAn0yTftlvIEk5p1MX8ZytKqSHwwHwYDVR0jBBgwFoAUiLx4Z/Xrrg/SZ68e
# vLTX9YeO+4wwggETBgNVHR8EggEKMIIBBjCCAQKggf+ggfyGgcFsZGFwOi8vL0NO
# PUJFLXRlcm5hLUNBKDMpLENOPUJFVElCS0NBMDEsQ049Q0RQLENOPVB1YmxpYyUy
# MEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9
# Y29ycCxEQz1iZS10ZXJuYSxEQz1jb20/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlz
# dD9iYXNlP29iamVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50hjZodHRwOi8v
# aWJjbS5iZS10ZXJuYS5jb20vQ2VydEVucm9sbC9CRS10ZXJuYS1DQSgzKS5jcmww
# ggEpBggrBgEFBQcBAQSCARswggEXMIGzBggrBgEFBQcwAoaBpmxkYXA6Ly8vQ049
# QkUtdGVybmEtQ0EsQ049QUlBLENOPVB1YmxpYyUyMEtleSUyMFNlcnZpY2VzLENO
# PVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y29ycCxEQz1iZS10ZXJuYSxE
# Qz1jb20/Y0FDZXJ0aWZpY2F0ZT9iYXNlP29iamVjdENsYXNzPWNlcnRpZmljYXRp
# b25BdXRob3JpdHkwXwYIKwYBBQUHMAKGU2h0dHA6Ly9pYmNtLmJlLXRlcm5hLmNv
# bS9DZXJ0RW5yb2xsL0JFVElCS0NBMDEuY29ycC5iZS10ZXJuYS5jb21fQkUtdGVy
# bmEtQ0EoMykuY3J0MDUGA1UdEQQuMCygKgYKKwYBBAGCNxQCA6AcDBpCYXN0aWFu
# Lktub29wQGJlLXRlcm5hLmNvbTBOBgkrBgEEAYI3GQIEQTA/oD0GCisGAQQBgjcZ
# AgGgLwQtUy0xLTUtMjEtMjg3MjY3MTU4NC02ODQxNjUxNzktMTU3NzU5ODI5Mi0x
# NjgzMA0GCSqGSIb3DQEBCwUAA4IBAQAFH3EhC1ZvoLTERtlk4l5reo2LdoDu4s/a
# d0xkjBG209elPdBnhE26QSlJgrmD313I3kTvpoRGE4eYb2+ppvBkIVjPzOTgxGtY
# LuyoLhnVsPKdfH6//UygFPmdNNRFXHZENzGJ92ZgGnNzNFfUXMVAN3CRdX3KGMTq
# Uxt7/1FUONIGB4MfwCIFeCxdX7ZsPXMl7yfDFgzVjB4Si5LLpvJqMeVwWcVr3Gfz
# iKs4iQUWLb453dSvdeJiLD1YVodRPsuLBWyM3bpJjm6AhhAZzlch4trtUJal/Ldn
# VaoTmvIXEtK+hEXDBLuo325KJRex2kVgrK1IKt82J6yKnezSY41OMYICEzCCAg8C
# AQEwcjBbMRMwEQYKCZImiZPyLGQBGRYDY29tMRgwFgYKCZImiZPyLGQBGRYIYmUt
# dGVybmExFDASBgoJkiaJk/IsZAEZFgRjb3JwMRQwEgYDVQQDEwtCRS10ZXJuYS1D
# QQITcQABkce599FfumsWxgADAAGRxzAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIB
# DDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEE
# AYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUEH/yglBhTnQJ
# QcKZaUZrDE9H/kUwDQYJKoZIhvcNAQEBBQAEggEAeI2Q7dXT+kxh0Kyw2wYRILs4
# 5PqMxsE1C+Xu4ro19AlETZJNI5CWFp5oISbJ7xCInp1EArvMIzTJuki6b0TPqt8L
# sKD/Ah46ojYCVZAcI/OCSfXd1gv/nZZScfaWCZyAhF6SLw8xJLE055+L5XtB30tE
# at/2yD4bJpv8p3pD227SnYbl8zT9AdMcudCiMjECfDcbQo4sItmq+sv+Lac+bCZZ
# MTaMi4gIaArS/8/5LZdT5u3n1RWb2NeNodWII2oulZ8/D8bwXaBy2qQWAjwZnOnr
# 5ocQl3fIC8DQc5N4lyA1PxWa8uWUNWGB58RlVk6eXH/zOOWiUQ+CJgKr4wewxQ==
# SIG # End signature block