Public/Update-PSConfigFile.ps1
<#PSScriptInfo .VERSION 1.1.3 .GUID 41acb0b5-43ed-42b4-8f58-55509cf88189 .AUTHOR Pierre Smit .COMPANYNAME iOCO Tech .COPYRIGHT .TAGS ps .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES Created [25/09/2021_13:12] Initital Script Creating Updated [05/10/2021_08:30] Spit into more functions Updated [08/10/2021_20:52] Getting ready to upload Updated [14/10/2021_19:32] Added PSDrive Script .PRIVATEDATA #> <# .DESCRIPTION updates the json file #> Param() #.ExternalHelp PSConfigFile-help.xml Function Update-PSConfigFile { <# .SYNOPSIS Adds functionality to add the execution to your profile or a PowerShell module .DESCRIPTION Adds functionality to add the execution to your profile or a PowerShell module .PARAMETER AddToModule Enable or disable loading of config when a specific module is loaded. .PARAMETER AddToProfile Enable or disable loading of config when your ps profile is loaded. .PARAMETER ConfigFile Path to the the config file ($PSConfigfile is a default variable created with the config file) .PARAMETER ExecuteNow Execute the config file .PARAMETER PathToPSM1File Path to ps module .EXAMPLE PS C:\> Update-PSConfigFile -ConfigFile C:\Temp\jdh\PSCustomConfig.json -AddToProfile AddScript -AddToModule AddScript -PathToPSM1File C:\Utils\LabScripts\LabScripts.psm1 #> [Cmdletbinding(SupportsShouldProcess = $true)] param ( [parameter(Mandatory)] [ValidateScript( { (Test-Path $_) -and ((Get-Item $_).Extension -eq '.json') })] [System.IO.FileInfo]$ConfigFile, [validateSet('AddScript','RemoveScript','Ignore')] [string]$AddToProfile = $false, [validateSet('AddScript','RemoveScript','Ignore')] [string]$AddToModule = 'Ignore', [ValidateScript( { (Test-Path $_) -and ((Get-Item $_).Extension -eq '.psm1') })] [System.IO.FileInfo]$PathToPSM1File, [switch]$ExecuteNow = $false ) try { $confile = Get-Item $ConfigFile Test-Path -Path $confile.FullName } catch { throw 'Incorect file' } if ($pscmdlet.ShouldProcess('Target', 'Operation')) { $resolve = Join-Path (Get-Module PSConfigFile).ModuleBase '\PSConfigFile.psm1' -Resolve $string = @("import-module $resolve -force ") #PSConfigFile") $string += @("Invoke-PSConfigFile -ConfigFile $($confile.FullName)") if ($AddToModule -like 'AddScript') { $ori = Get-Content $PathToPSM1File | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori + $string) -Path $PathToPSM1File -Verbose } if ($AddToModule -like 'RemoveScript') { $ori = Get-Content $PathToPSM1File | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori) -Path $PathToPSM1File -Verbose } if ($AddToProfile -like 'AddScript') { if ((Test-Path (Get-Item $profile).DirectoryName) -eq $false ) { Write-Warning 'Profile does not exist, creating file.' New-Item -ItemType File -Path $Profile -Force } $psfolder = (Get-Item $profile).DirectoryName $ps = Join-Path $psfolder \Microsoft.PowerShell_profile.ps1 $ise = Join-Path $psfolder \Microsoft.PowerShellISE_profile.ps1 $vs = Join-Path $psfolder \Microsoft.VSCode_profile.ps1 if (Test-Path $ps) { $ori = Get-Content $ps | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori + $string) -Path $ps -Verbose } if (Test-Path $ise) { $ori = Get-Content $ise | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori + $string) -Path $ise -Verbose } if (Test-Path $vs) { $ori = Get-Content $vs | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori + $string) -Path $vs -Verbose } } if ($AddToProfile -like 'RemoveScript') { if ((Test-Path (Get-Item $profile).DirectoryName) -eq $false ) { Write-Warning 'Profile does not exist, creating file.' New-Item -ItemType File -Path $Profile -Force } $psfolder = (Get-Item $profile).DirectoryName $ps = Join-Path $psfolder \Microsoft.PowerShell_profile.ps1 $ise = Join-Path $psfolder \Microsoft.PowerShellISE_profile.ps1 $vs = Join-Path $psfolder \Microsoft.VSCode_profile.ps1 if (Test-Path $ps) { $ori = Get-Content $ps | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori) -Path $ps -Verbose } if (Test-Path $ise) { $ori = Get-Content $ise | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori) -Path $ise -Verbose } if (Test-Path $vs) { $ori = Get-Content $vs | Where-Object { $_ -notlike '*PSConfigFile*' } Set-Content -Value ($ori) -Path $vs -Verbose } } if ($ExecuteNow) { Clear-Host Invoke-PSConfigFile -ConfigFile $($confile.FullName) } } } #end Function |