Merge branch 'master' of https://code.lksz.me/lksz/PowerShell_Scripts
This commit is contained in:
commit
2b51f37cb7
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"package": {
|
||||
"Condition": [],
|
||||
"Name": "GitHub"
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Get-Content
|
|
@ -14,10 +14,10 @@
|
|||
[string[]]$AlsoEditTheseScripts
|
||||
)
|
||||
|
||||
$local:FilePaths = @() + $( Get-Profiles | Where-Object { $_.Exists -or $Force } | Select-Object -ExpandProperty Path )
|
||||
[string[]]$local:FilePaths = @() + $( Get-Profiles | Where-Object { $_.Exists -or $Force } | Select-Object -ExpandProperty Path )
|
||||
foreach( $local:p in $AlsoEditTheseScripts ) {
|
||||
$local:sp = Join-Path $MyPSScriptRoot "$p`.ps1"
|
||||
$FilePaths += $sp
|
||||
}
|
||||
|
||||
Edit-TextFile -sudo:$sudo $FilePaths
|
||||
Edit-TextFile -sudo:$sudo -Path $FilePaths
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
[CmdletBinding(SupportsShouldProcess)]param(
|
||||
[switch]$sudo,
|
||||
[Parameter(Position = 0, ValueFromRemainingArguments = $true)]
|
||||
[Parameter(Position = 0, ValueFromPipeline, ValueFromRemainingArguments = $true)]
|
||||
[string[]]$Path
|
||||
)
|
||||
|
||||
begin {
|
||||
$PathForEditor = @()
|
||||
}
|
||||
process {
|
||||
foreach( $local:P in $Path ) {
|
||||
$PathForEditor += $P | Get-Path -Expand
|
||||
}
|
||||
}
|
||||
|
||||
end {
|
||||
$local:editors = $env:EDITOR,'nvim','code'
|
||||
$local:editor = $null
|
||||
foreach( $local:testEditor in $editors ) {
|
||||
|
@ -23,9 +33,12 @@ if( $editor -match 'code(\.exe)?$' ) {
|
|||
}
|
||||
}
|
||||
|
||||
$local:arguments = $Path | Get-Path -Expand | Join-String -Separator "' '"
|
||||
if( $Path ) { $arguments = "'$arguments'" }
|
||||
Write-Verbose $($Path | Out-String)
|
||||
|
||||
$local:arguments = $PathForEditor | Foreach-Object { "'$_'" }
|
||||
if( $Path ) { $arguments = "$arguments" }
|
||||
|
||||
if( $PSCmdlet.ShouldProcess( "Edit ($editor): $arguments" ) ) {
|
||||
Invoke-ExpressionEx -sudo:$sudo $editor "$arguments"
|
||||
}
|
||||
}
|
|
@ -5,7 +5,15 @@
|
|||
)
|
||||
$local:possibleValues = $fullValueSet
|
||||
if( $wordToComplete ) {
|
||||
$possibleValues = $possibleValues | Where-Object { $_ -match $wordToComplete }
|
||||
$possibleValues = $possibleValues |
|
||||
Where-Object { $_ -match $wordToComplete } |
|
||||
ForEach-Object {
|
||||
if( $_ -match ' ' ) {
|
||||
"'$_'"
|
||||
} else {
|
||||
$_
|
||||
}
|
||||
}
|
||||
if( -not $strict -and ($wordToComplete -notin $possibleValues) ) {
|
||||
$possibleValues = $( $wordToComplete; $possibleValues )
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ process {
|
|||
$outputFileName = Join-Path $OutputPath $outputFileName
|
||||
|
||||
if( (Test-Path $outputFileName) -and -not $Force) {
|
||||
throw "$OutputPath already exists"
|
||||
throw "$OutputFileName file already exists"
|
||||
}
|
||||
|
||||
Write-Verbose "About to start download from:`n`t$Url`n`tto`n`t$outputFileName`n"
|
||||
|
|
|
@ -1,8 +1,31 @@
|
|||
[CmdletBinding(SupportsShouldProcess)]param()
|
||||
|
||||
try { Get-Alias Get-MyAliases -ErrorAction Stop | ForEach-Object { Remove-Item "Alias:$($_.Name)" } } catch {}
|
||||
function RemoveAlias {
|
||||
param([string]$Name)
|
||||
$local:a = $Name | Where-Object { $_ } | Get-Alias -ErrorAction SilentlyContinue
|
||||
if ( -not $a ) { return }
|
||||
if ( Get-Command Remove-Alias -ErrorAction SilentlyContinue ) {
|
||||
$a | Remove-Alias -Scope $MyAliasScope -ErrorAction SilentlyContinue
|
||||
}
|
||||
else {
|
||||
Remove-Item "Alias:$a"
|
||||
}
|
||||
}
|
||||
function SafeSetAlias {
|
||||
param([string]$Name, [string]$Value, [string]$Description)
|
||||
|
||||
. RemoveAlias $Name
|
||||
try {
|
||||
Set-Alias $Name $Value -Scope $MyAliasScope -Description:$Description -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
Set-Alias $Name $Value -Scope $MyAliasScope -Description:$Description -Option AllScope
|
||||
}
|
||||
}
|
||||
|
||||
try { Get-Alias Get-MyAliases -ErrorAction Stop | ForEach-Object { . RemoveAlias $($_.Name) } } catch {}
|
||||
function Get-MyAliases {
|
||||
[CmdletBinding(SupportsShouldProcess)]param([switch]$ScriptsOnly)
|
||||
[CmdletBinding()]param([switch]$ScriptsOnly)
|
||||
|
||||
$local:allAliases = @()
|
||||
|
||||
|
@ -13,14 +36,15 @@ function Get-MyAliases {
|
|||
try {
|
||||
$local:newAliases += Get-Alias -Scope $_scope |
|
||||
Where-Object {
|
||||
($_.Definition -match "^$MyPSScriptRoot") -or (-not $ScriptsOnly -and ($_.Description -match '#MyAlias'))
|
||||
($_.Definition -like "$MyPSScriptRoot*") -or (-not $ScriptsOnly -and ($_.Description -match '#MyAlias'))
|
||||
}
|
||||
if ( $newAliases ) {
|
||||
$allAliases += $newAliases
|
||||
$MyAliasScope = $_scope;
|
||||
Write-Verbose "`$MyAliasScope is now set to $MyAliasScope"
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
catch {
|
||||
Write-Verbose "catch: $($_.Exception.Message)"
|
||||
$_done = $_.Exception.Message -match 'The scope .* exceeds'
|
||||
}
|
||||
|
@ -30,7 +54,8 @@ function Get-MyAliases {
|
|||
$allAliases
|
||||
}
|
||||
|
||||
function getScriptName{param([string]$FullPath)
|
||||
function getScriptName {
|
||||
param([string]$FullPath)
|
||||
$FullPath -replace '\.ps1$', '' -replace "^$([regex]::Escape($MyPSScriptRoot)).", ''
|
||||
}
|
||||
|
||||
|
@ -39,7 +64,8 @@ $local:IsVerbose = [bool]($PSBoundParameters['Verbose'])
|
|||
# Loads mandatory Package code
|
||||
try {
|
||||
$null = [Packagesz]
|
||||
} catch {
|
||||
}
|
||||
catch {
|
||||
$local:PackagePath = $(Join-Path $MyPSScriptRoot 'base')
|
||||
Join-Path $(Join-Path $PackagePath profile.d) 'classes.ps1' |
|
||||
Where-Object { Test-Path $_ } | ForEach-Object { . $_ }
|
||||
|
@ -65,18 +91,14 @@ $oldAliases = Get-Alias -Scope $MyAliasScope |
|
|||
if ( $oldAliases -and $IsVerbose ) {
|
||||
Write-Verbose "Removing: $($oldAliases.Name -join ', ')"
|
||||
}
|
||||
if( Get-Command Remove-Alias -ErrorAction SilentlyContinue ) {
|
||||
$oldAliases | Remove-Alias -Scope $MyAliasScope
|
||||
} else {
|
||||
$oldAliases | ForEach-Object { Remove-Item "Alias:$($_.Name)" }
|
||||
}
|
||||
$oldAliases | ForEach-Object { . RemoveAlias $($_.Name) }
|
||||
|
||||
if ( $(. Get-ScopeDepth) -gt 0 ) {
|
||||
Write-Host -ForegroundColor Red "Try sourcing Reload-MyScripts instead of just running it"
|
||||
}
|
||||
|
||||
foreach ( $local:PackagePath in $myPackages ) {
|
||||
$local:PackageName = $PackagePath.Name
|
||||
#$local:PackageName = $PackagePath.Name
|
||||
|
||||
Join-Path $PackagePath 'profile.d' | Where-Object { Test-Path $_ } |
|
||||
Get-ChildItem -Filter '*.ps1' |
|
||||
|
@ -98,14 +120,15 @@ foreach( $local:PackagePath in $myPackages ) {
|
|||
Get-ChildItem (Join-Path $_ '*.ps1') | Where-Object Name -notmatch '\.inc\.ps1$'
|
||||
}
|
||||
|
||||
$CommandsToAlias | ForEach-Object {
|
||||
Write-Verbose "Creating alias for $(getScriptName $_.FullName) Script..."
|
||||
Set-Alias $($_.BaseName) $_.FullName -Scope $MyAliasScope
|
||||
foreach ( $local:newAlias in $CommandsToAlias ) {
|
||||
Write-Verbose "Creating alias for $(getScriptName $newAlias.FullName) Script..."
|
||||
. SafeSetAlias $($newAlias.BaseName) $($newAlias.FullName)
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $local:alias in $myAliases.Keys ) {
|
||||
Write-Verbose "Adding $($alias) alias..."
|
||||
Set-Alias -Name $alias -Value $myAliases[$alias] -Description '#MyAlias' -Scope $MyAliasScope
|
||||
. SafeSetAlias $alias $myAliases[$alias] '#MyAlias'
|
||||
}
|
||||
|
||||
Remove-Item Function:\RemoveAlias, Function:\SafeSetAlias -ErrorAction SilentlyContinue
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
)
|
||||
|
||||
$local:EditCandidates = @('docker-compose.###','.base.docker-compose.###')
|
||||
$local:EditCandidates = @('docker-compose.###','.base.docker-compose.###','secrets.env')
|
||||
$local:EditBonus = @('Dockerfile', '.env', '*.env')
|
||||
$local:editFiles = @()
|
||||
foreach( $local:ext in @('.yml', '.yaml') ) {
|
||||
|
@ -15,7 +15,7 @@ foreach( $local:ext in @('.yml', '.yaml') ) {
|
|||
foreach( $local:path in $ProjectPath ) {
|
||||
$local:testPath = Join-Path $path $fileName
|
||||
if( $Force -or $(Test-Path $testPath) ) {
|
||||
$editFiles += $testPath
|
||||
$editFiles += $testPath | Get-Path
|
||||
$editFiles += Get-ChildItem $(Join-Path $path '*') -Include $EditBonus -Depth 1 |
|
||||
Select-Object -ExpandProperty FullName
|
||||
}
|
||||
|
@ -37,9 +37,17 @@ $AdditionalFiles = $AdditionalFiles | Where-Object { $_ } | ForEach-Object {
|
|||
|
||||
$local:FinalEditList = $editFiles | Where-Object {$_} | Sort-Object {
|
||||
$local:n = [System.IO.Path]::GetFileName($_)
|
||||
Join-Path [PSystem.IO.ath]::GetDirectoryName($_) "$(if( $n[0] -eq '.' ) { "9" } else { "1" })$n"
|
||||
$local:sorder = "$(
|
||||
if( $n[0] -eq '.' ) { "2" }
|
||||
elseif( $n -match 'docker-compose\.y' ) { "1" }
|
||||
else { "9" }
|
||||
)$n"
|
||||
Write-Verbose "sorder($n)=$sorder"
|
||||
$local:sorder = Join-Path $([System.IO.Path]::GetDirectoryName($_)) $sorder
|
||||
$sorder
|
||||
}
|
||||
$FinalEditList = (@() + $FinalEditList + @() + $AdditionalFiles) | Select-Object -Unique
|
||||
Write-Verbose "`$FinalEditList = `n$($FinalEditList | Out-String)"
|
||||
|
||||
Edit-TextFile $FinalEditList
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
$local:workTree = git worktree list --porcelain | Select-String worktree | ForEach-Object { $_ -split 'worktree ' } | Where-Object { $_ }
|
||||
Edit-TextFile $(Join-Path $workTree .gitignore)
|
|
@ -0,0 +1,11 @@
|
|||
[CmdletBinding()]param(
|
||||
[Parameter(Mandatory)]
|
||||
[string]$GitHubProject,
|
||||
[string]$tag='latest'
|
||||
)
|
||||
|
||||
Invoke-WebRequest https://github.com/$GitHubProject/releases/$tag -ErrorAction Stop |
|
||||
Select-Object -ExpandProperty Links |
|
||||
Where-Object title |
|
||||
Where-Object href -match 'tree/[^/]+$' |
|
||||
Select-Object -ExpandProperty title -First 1
|
|
@ -0,0 +1,29 @@
|
|||
[CmdletBinding(SupportsShouldProcess)]param(
|
||||
[Parameter(Mandatory)]
|
||||
[string]$LocalPath,
|
||||
[Parameter(Mandatory)]
|
||||
[string]$GitOrigin,
|
||||
[string]$Branch='HEAD'
|
||||
)
|
||||
$local:gitPath = Join-Path 'themes' 'plextheme' | Get-Path
|
||||
function doGit { git "--git-dir=`"$(Join-Path $LocalPath '.git')`"" "--work-tree=`"$LocalPath`"" $args }
|
||||
$local:savedErrorActionPreference = $ErrorActionPreference
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$local:exists = Test-Path $LocalPath
|
||||
try {
|
||||
if( $exists ) {
|
||||
# Update code from git repo
|
||||
Write-Verbose "Pulling from [$GitOrigin] into [$LocalPath] on branch/tag '$Branch'..."
|
||||
doGit fetch --quiet
|
||||
} else {
|
||||
git clone $GitOrigin $LocalPath
|
||||
}
|
||||
doGit checkout $Branch --quiet
|
||||
if( $exists ) {
|
||||
doGit status
|
||||
}
|
||||
} catch {
|
||||
throw $_
|
||||
} finally {
|
||||
$ErrorActionPreference = $savedErrorActionPreference
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
$local:workTree = git worktree list --porcelain | Select-String worktree | ForEach-Object { $_ -split 'worktree ' } | Where-Object { $_ }
|
||||
Push-Location $workTree
|
||||
$null = git reset HEAD
|
||||
$null = git rm --cached -r .
|
||||
$null = git add .
|
||||
git status
|
||||
Pop-Location
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"package": {
|
||||
"Condition": [
|
||||
{
|
||||
"custom": "Get-Command git -Type Application",
|
||||
"System": null,
|
||||
"Hostname": null,
|
||||
"Username": null,
|
||||
"Logic": 0
|
||||
}
|
||||
],
|
||||
"Name": "git"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue