diff --git a/scripts/Common/Config/powershell/profile.ps1 b/scripts/Common/Config/powershell/profile.ps1 new file mode 100644 index 00000000..238b1d14 --- /dev/null +++ b/scripts/Common/Config/powershell/profile.ps1 @@ -0,0 +1,46 @@ +#!/bin/pwsh +$null = New-Module { + function Add-PowerShellProfileStatement() { + param ( + [string]$HomeDir = "~", + [string]$Category = $null, + [Parameter(Position=0, Mandatory=$true)] + [string]$Statement, + [bool]$Overwrite = $false + ) + + [System.Collections.Generic.List[string]] $profiles = @(); + + if (Get-Command pwsh) { + $profiles.Add($(pwsh -c '$PROFILE')); + } + + if (Get-Command powershell) { + $profiles.Add($(powershell -c '$PROFILE')); + } + + Push-Location ~; + $profiles = $profiles | ForEach-Object { Resolve-Path -Relative $_ }; + + if ($Category) { + $profiles = $profiles | ForEach-Object { Join-Path (Split-Path -Parent $_) "profile.d" "$Category.ps1"; }; + } + + $profiles | ForEach-Object { + $fileName = "$HomeDir/$_"; + $dirName = Split-Path -Parent $fileName; + + if (-not (Test-Path -PathType Container $dirName)) { + New-Item -ItemType Directory $dirName; + } + + if ((Test-Path -PathType Leaf $fileName) -and (-not $Overwrite)) { + Add-Content -Force "$fileName" "`n$Statement"; + } else { + Set-Content -Force "$fileName" "$Statement"; + } + }; + + Pop-Location; + } +} diff --git a/scripts/Windows/Scripts/Context.ps1 b/scripts/Windows/Scripts/Context.ps1 index 89a34fbe..ddfd592b 100644 --- a/scripts/Windows/Scripts/Context.ps1 +++ b/scripts/Windows/Scripts/Context.ps1 @@ -1,4 +1,6 @@ #!/bin/pwsh +. "$PSScriptRoot/../../Common/Config/powershell/profile.ps1"; + class Context { [string]$EntryPoint; [string]$RootDir; @@ -47,41 +49,29 @@ class Context { } [void] AddPowerShellProfileStatement([bool] $defaultUser, [string] $category, [string] $statement) { - [string] $userDir = $null; + [string] $homeDir = $null; if ($defaultUser) { - $userDir = "C:\Users\Default"; + $homeDir = "C:\Users\Default"; } else { - $userDir = "~"; + $homeDir = "~"; } - $this.AddPowerShellProfileStatement($userDir, $category, $statement); + $this.AddPowerShellProfileStatement($homeDir, $category, $statement); } - [void] AddPowerShellProfileStatement([string] $userDir, [string] $category, [string] $statement) { - Push-Location ~; - $profileFiles = @((powershell -c '$PROFILE'), (pwsh -c '$PROFILE')) | ForEach-Object { Resolve-Path -Relative $_ }; - + [void] AddPowerShellProfileStatement([string] $homeDir, [string] $category, [string] $statement) { if ($category) { - $profileFiles = $profileFiles | ForEach-Object { Join-Path (Split-Path -Parent $_) "profile.d" "$category.ps1"; }; + $overwrite = $true; + } else { + $overwrite = $false; } - $profileFiles | ForEach-Object { - $fileName = "$userDir\$_"; - $dirName = Split-Path -Parent $fileName; + $this.AddPowerShellProfileStatement($homeDir, $category, $statement, $overwrite); + } - if (-not (Test-Path -PathType Container $dirName)) { - New-Item -ItemType Directory $dirName; - } - - if (Test-Path -PathType Leaf $fileName) { - Add-Content -Force "$fileName" "`n$statement"; - } else { - Set-Content -Force "$fileName" "$statement"; - } - }; - - Pop-Location; + [void] AddPowerShellProfileStatement([string] $homeDir, [string] $category, [string] $statement, [bool] $overwrite) { + Add-PowerShellProfileStatement -HomeDir $homeDir -Category $category -Statement $statement -Overwrite $overwrite; } [Microsoft.Win32.RegistryKey] EnsureConfigKey() {