#!/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]] $shells = @(); [System.Collections.Generic.List[string]] $profiles = @(); if (Get-Command pwsh -ErrorAction SilentlyContinue) { $shells.Add("pwsh"); } if (Get-Command powershell -ErrorAction SilentlyContinue) { $shells.Add("powershell"); } foreach ($shell in $shells) { $path = & $shell -NoProfile -c '$PROFILE'; $profiles.Add($path); } Push-Location ~; $profiles = $profiles | ForEach-Object { [System.IO.Path]::GetRelativePath($(Get-Location), $_); }; 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)) { $null = New-Item -ItemType Directory -Force $dirName; } if ((Test-Path -PathType Leaf $fileName) -and (-not $Overwrite)) { Add-Content -Force "$fileName" "`n$Statement"; } else { Set-Content -Force "$fileName" "$Statement"; } }; Pop-Location; } function Get-ScriptInitializer() { param ( [Parameter(Position=0, Mandatory=$true)] $Initializer ) return ". ([scriptblock]::Create(($Initializer) -join `"``n`"))"; } }