Add scripts for installing PowerShell
This commit is contained in:
parent
26ef9a12b9
commit
36336e332d
4 changed files with 129 additions and 0 deletions
60
scripts/Common/Software/PowerShell/Manage.ps1
Normal file
60
scripts/Common/Software/PowerShell/Manage.ps1
Normal file
|
@ -0,0 +1,60 @@
|
|||
param (
|
||||
$Action,
|
||||
[hashtable] $Arguments
|
||||
)
|
||||
|
||||
. "$PSScriptRoot/../../../Windows/Scripts/Software.ps1";
|
||||
. "$PSScriptRoot/../../../Windows/Scripts/Scripting.ps1";
|
||||
. "$PSScriptRoot/../../../Windows/Types/InstallerAction.ps1";
|
||||
|
||||
Start-SoftwareInstaller @PSBoundParameters `
|
||||
-Installer {
|
||||
param(
|
||||
[scriptblock] $Installer
|
||||
)
|
||||
|
||||
& $Installer -Action ([InstallerAction]::Configure);
|
||||
} `
|
||||
-Configurator {
|
||||
param(
|
||||
[hashtable] $Arguments
|
||||
)
|
||||
|
||||
[string] $globalDir = $null;
|
||||
$indicator = "# Profile Files";
|
||||
|
||||
if ($Arguments.Linux) {
|
||||
$globalDir = '"/etc/powershell/conf.d"';
|
||||
} else {
|
||||
$globalDir = '"$env:ProgramData/PowerShell/conf.d"';
|
||||
}
|
||||
|
||||
[System.Collections.ArrayList] $files = @($PROFILE);
|
||||
|
||||
if (Test-Command powershell) {
|
||||
$null = $files.Add((powershell -c '$PROFILE'));
|
||||
}
|
||||
|
||||
foreach ($file in $files) {
|
||||
if (-not ((Test-Path -PathType Leaf $file) -and ((Get-Content $file) -contains $indicator))) {
|
||||
Write-PSScript -FileName $file -Script (@(
|
||||
$indicator,
|
||||
"`$globalDir = $globalDir",
|
||||
({
|
||||
$profileRoot = Split-Path -Parent $PROFILE;
|
||||
|
||||
$profilePaths = @(
|
||||
"$profileRoot/conf.d/*.ps1",
|
||||
"$globalDir/*.ps1"
|
||||
)
|
||||
|
||||
foreach ($profilePath in $profilePaths) {
|
||||
if (Test-Path $profilePath) {
|
||||
Get-Item $profilePath | ForEach-Object { . $_; };
|
||||
}
|
||||
}
|
||||
}).ToString()) -join "`n") `
|
||||
-Append;
|
||||
}
|
||||
}
|
||||
};
|
|
@ -64,6 +64,7 @@ $null = New-Module {
|
|||
|
||||
Invoke-Hook "Install-PSModules" -Fallback {
|
||||
Install-Module -AcceptLicense -Force PSWindowsUpdate;
|
||||
Install-Module -AcceptLicense -Force PSScriptAnalyzer;
|
||||
};
|
||||
|
||||
if (-not (Test-Winget)) {
|
||||
|
@ -182,6 +183,7 @@ $null = New-Module {
|
|||
if (Test-Collection "essential") {
|
||||
# Essentials
|
||||
. "$softwarePath/OpenSSH/Manage.ps1" @arguments;
|
||||
. "$softwarePath/PowerShell/Manage.ps1";
|
||||
}
|
||||
|
||||
if (Test-Collection "common") {
|
||||
|
|
|
@ -14,3 +14,49 @@ function ConvertTo-Injection {
|
|||
[System.Convert]::ToBase64String([System.Text.Encoding]::Default.GetBytes($value))
|
||||
)')))"
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Writes a PowerShell script to a specified location.
|
||||
|
||||
.PARAMETER FileName
|
||||
The name of the file to write the script to.
|
||||
|
||||
.PARAMETER Script
|
||||
The script to write to the file.
|
||||
|
||||
.PARAMETER Replace
|
||||
A value indicating whether the file should be overwritten if it exists.
|
||||
|
||||
.PARAMETER Append
|
||||
A value indicating whether the content should be appended if the file already exists.
|
||||
#>
|
||||
function Write-PSScript {
|
||||
param(
|
||||
[string] $FileName,
|
||||
[string] $Script,
|
||||
[Parameter(ParameterSetName="Replace")]
|
||||
[switch] $Replace,
|
||||
[Parameter(ParameterSetName="Append")]
|
||||
[switch] $Append
|
||||
)
|
||||
|
||||
Import-Module PSScriptAnalyzer;
|
||||
$dirName = Split-Path -Parent $FileName;
|
||||
$content = Invoke-Formatter -ScriptDefinition $Script;
|
||||
$exists = Test-Path -PathType Leaf $FileName;
|
||||
|
||||
if (-not (Test-Path -PathType Container $dirName)) {
|
||||
$null = New-Item -ItemType Directory $dirName;
|
||||
}
|
||||
|
||||
if ($exists -and ($Append.IsPresent)) {
|
||||
Add-Content -Force $FileName "`n$content";
|
||||
} else {
|
||||
if ((-not $exists) -or $Replace.IsPresent) {
|
||||
Set-Content -Force $FileName $content;
|
||||
} else {
|
||||
Write-Host "The file ``$FileName`` already exists!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
21
scripts/Windows/Software/PowerShell/Manage.ps1
Normal file
21
scripts/Windows/Software/PowerShell/Manage.ps1
Normal file
|
@ -0,0 +1,21 @@
|
|||
param (
|
||||
$Action,
|
||||
[hashtable] $Arguments
|
||||
)
|
||||
|
||||
. "$PSScriptRoot/../../Scripts/Software.ps1";
|
||||
. "$PSScriptRoot/../../Types/InstallerAction.ps1";
|
||||
|
||||
Start-SoftwareInstaller @PSBoundParameters `
|
||||
-Installer {
|
||||
param(
|
||||
[scriptblock] $Installer
|
||||
)
|
||||
|
||||
& $Installer -Action ([InstallerAction]::Configure);
|
||||
} `
|
||||
-Configurator {
|
||||
. "$PSScriptRoot/../../../Common/Software/PowerShell/Manage.ps1" `
|
||||
-Action ([InstallerAction]::Configure) `
|
||||
-Arguments @{ Linux = $false };
|
||||
};
|
Loading…
Reference in a new issue