LARSINUS.psm1


function Add-Prefix{
      <#
            .SYNOPSIS
            Adds a line prefix
            .PARAMETER Color
            .PARAMETER InfoType
            .DESCRIPTION
            It will add a prefix that you can use in front of your Write-Host.
            The output is a square brackets with some text (of your choice) between in a color (of your choice)
            .EXAMPLE
            Add-Prefix -Color Red -InfoType Error
            [ERROR]
            .EXAMPLE
            Add-Prefix -Color Magenta -InfoType Information ; Write-Host 'Hello World!'
            [INFORMATION] Hello World!
      #>

      param (
            [Parameter()]
            #[validateset('Black','DarkBlue','DarkGreen','DarkCyan','DarkRed','DarkMagenta','DarkYellow','Gray','DarkGray','Blue','Green','Cyan','Red','Magenta','Yellow','White')]
            [ConsoleColor]$Color,
            [Parameter()]
            [string]$InfoType
      )

      Write-Host '[' -NoNewline
      Write-Host -ForegroundColor $color ($infoType).ToUpper() -NoNewline
      Write-Host '] ' -noNewline
}

function Add-Space () {
      <#
            .SYNOPSIS
            Adds spaces after previous text block based on that length.
            .PARAMETER TextLength
            .PARAMETER MaxSpace
            .DESCRIPTION
            Used to make sure your columns are aligned correctly when doing Write-Host and the previous text block had different length.
            This will calculate how much space should be added at the end of the previous text block.
            .EXAMPLE
            Add-Space -TextLength $String.Length -MaxSpace 25
      #>

      param (
            [Parameter (Mandatory=$true)]
            [int]$TextLength,
            [Parameter (Mandatory=$True)]
            [int]$MaxSpace
      )

      $SpaceToAdd = ($MaxSpace - $TextLength)

      While ($SpaceToAdd -gt 0){
            $Space = $Space + ' '
            $SpaceToAdd--
      }
      Write-Host $Space -NoNewline
}

function Open-File {
      <#
            .SYNOPSIS
            Gets a file.
            .PARAMETER Path
            .DESCRIPTION
            Opens the Windows Explorer so you can browse to a file to be used in your script.
            Can be used together with other functions/cmdlets
            .EXAMPLE
            Open-File
            Opens Windows Explorer in the current directory you're in.
            .EXAMPLE
            Open-File -Path C:\Users\User1\OneDrive\MyScripts
            .EXAMPLE
            $information = Get-Content (Open-File -Path "C:fso") | ConvertFrom-Json
      #>

      param (
            [parameter()]
            $Path = 'C:fso'
      )

      [System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”)
      Out-Null
      $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
      $OpenFileDialog.initialDirectory = $Path
      $OpenFileDialog.filter = “All files (*.*)| *.*”
      $OpenFileDialog.ShowDialog() | Out-Null
      $OpenFileDialog.filename
}

function Save-File {
      <#
            .SYNOPSIS
            Saves a file.
            .PARAMETER Path
            .PARAMETER FileDialogFileType
            .DESCRIPTION
            Opens the Windows Explorer so you can browse to where you want to save the file.
            Use the parameter -FileDialogFileType to specify which file type you want the user to be able to save as.
            .EXAMPLE
            Save-File -FileDialogFileType *.*
            Opens Windows Explorer in the current directory you're in.
            .EXAMPLE
            Save-File -Path C:\Users\User1\OneDrive\Scripts\Logs -FileDialogFileType *.log
      #>

      param (
            [parameter()]
            $Path = 'C:fso',
            [Parameter(Mandatory = $true)]
            [String]$FileDialogFileType
      )

      [System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”)
      Out-Null
      $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
      $SaveFileDialog.initialDirectory = $Path
      $SaveFileDialog.filter = “All files ($FileDialogFileType )| $FileDialogFileType ”
      $result = $SaveFileDialog.ShowDialog()

      if ($result -eq 'OK'){
            Out-File -FilePath $SaveFileDialog.filename -InputObject $arrCollections
      }
}

function Enable-Sideloading {
      <#
            .SYNOPSIS
            Enables Sidelaoding of apps
            .DESCRIPTION
            ---[ MUST BE RUN WITH ELEVATED PRIVILEGES ]---
            Enables sideloading of applications in Windows 10.
            Being used to allow installations of custom/LOB .msix packaged apps.
            Since they are not published to the Microsoft Store, we need to enable sideloading.
            They are secured by using certificates.
            .EXAMPLE
            Enable-Sideloading.ps1
      #>


      $registryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
      $Name1 = "AllowAllTrustedApps"
      $value1 = "1"
      New-ItemProperty -Path $registryPath -Name $name1 -Value $value1 -PropertyType DWORD -Force

      $Name2 = "AllowDevelopmentWithoutDevLicense"
      $value2 = "0"

      New-ItemProperty -Path $registryPath -Name $name2 -Value $value2 -PropertyType DWORD -Force
}

function New-LHGUID {
      <#
            .SYNOPSIS
            Creates a new GUID
            .DESCRIPTION
            Creates one or more GUID's in different color to easier differentiate between them.
            .Parameter Count
            .EXAMPLE
            New-LHGUID
            Writes one new GUID to the screen.
            .EXAMPLE
            New-LHGUID -Count 4
            Writes four new GUID's to the screen.
      #>

      param (
      $Count = 1
      )

      for ($i=0; $i -lt $Count; $i++){
            $max = [System.ConsoleColor].GetFields().Count - 1
            $color = [System.ConsoleColor](Get-Random -Min 1 -Max $max)
            Write-Host -BackgroundColor Black "[$($i+1)] " -NoNewline
            Write-Host -ForegroundColor $color (New-Guid) 
      }   
}


Export-ModuleMember -Function Add-Prefix
Export-ModuleMember -Function Add-Space
Export-ModuleMember -Function Open-File
Export-ModuleMember -Function Save-File
Export-ModuleMember -Function Enable-Sideloading
Export-ModuleMember -Function New-LHGUID