#!/bin/pwsh $null = New-Module { function Add-PowerShellProfileStatement() { param ( [Parameter(ParameterSetName="Global", Mandatory)] [switch]$System, [Parameter(ParameterSetName="DefaultUser", Mandatory)] [switch]$DefaultUser, [Parameter(ParameterSetName="Home")] [string]$HomeDir = "~", [Parameter(ParameterSetName="Global", Mandatory)] [Parameter(ParameterSetName="DefaultUser")] [Parameter(ParameterSetName="Home")] [string]$Category = $null, [Parameter(Position=0, Mandatory=$true)] [string]$Statement, [switch]$Overwrite ) [System.Collections.Generic.List[string]] $profiles = @(); if ($System) { $configRoot; if ($IsWindows) { $configRoot = "$env:ProgramData"; } else { $configRoot = "/etc"; } $profiles = @("$configRoot/powershell/."); } else { [System.Collections.Generic.List[string]] $shells = @(); if ($DefaultUser) { if ($IsWindows) { $HomeDir = "C:/Users/Default"; } else { $HomeDir = "/etc/skel" } } 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), $_); } | ForEach-Object { "$HomeDir/$_" }; } if ($Category) { if (-not $($Overwrite.IsPresent)) { $Overwrite = $true; } $profiles = $profiles | ForEach-Object { Join-Path (Split-Path -Parent $_) "conf.d" "$Category.ps1"; }; } $profiles | ForEach-Object { $dirName = Split-Path -Parent $_; if (-not (Test-Path -PathType Container $dirName)) { $null = New-Item -ItemType Directory -Force $dirName; } if ((Test-Path -PathType Leaf $_) -and (-not $Overwrite)) { Add-Content -Force "$_" "`n$Statement"; } else { Set-Content -Force "$_" "$Statement"; } }; Pop-Location; } function Get-ScriptInitializer() { param ( [Parameter(Position=0, Mandatory=$true)] $Initializer ) return ". ([scriptblock]::Create(($Initializer) -join `"``n`"))"; } }