Relocate powershell profile script
This commit is contained in:
parent
005c575320
commit
150775e068
7 changed files with 6 additions and 6 deletions
scripts/Common/Software/powershell
95
scripts/Common/Software/powershell/profile.ps1
Normal file
95
scripts/Common/Software/powershell/profile.ps1
Normal file
|
@ -0,0 +1,95 @@
|
|||
#!/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`"))";
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue