diff --git a/Setup-Profile.ps1 b/Setup-Profile.ps1 index 4c1a869..1f2e557 100644 --- a/Setup-Profile.ps1 +++ b/Setup-Profile.ps1 @@ -171,10 +171,10 @@ Get-Command Reload-MyScripts -ErrorAction SilentlyContinue | ForEach-Object { . Invoke-ExpressionEx -sudo:$shouldSudo chmod 'a+r' $tmpOutput.FullName } try { - $local:errMsg = $(Invoke-ExpressionEx -sudo:$shouldSudo @" - if( -not (Test-Path $(Split-Path -Parent $p)) ) { New-Item -Type Directory $(Split-Path -Parent $p) -Force }; - Copy-Item $($tmpOutput.FullName) $p -Force:`$$Force -ErrorAction Stop | Out-Null; - Remove-Item $($tmpOutput.FullName) -Force:`$$Force -ErrorAction SilentlyContinue + $local:errMsg = $(Invoke-ExpressionEx -Confirm:$false -sudo:$shouldSudo @" + if( -not (Test-Path $(Split-Path -Parent $p)) ) { New-Item -Type Directory "$(Split-Path -Parent $p)" -Force }; + `$null = Copy-Item "$($tmpOutput.FullName)" "$p" -Force:`$$Force -ErrorAction Stop; + Remove-Item "$($tmpOutput.FullName)" -Force:`$$Force -ErrorAction SilentlyContinue "@ 2>&1) if ( $errMsg ) { Write-Error "$errMsg" @@ -268,7 +268,7 @@ function Invoke-ExpressionEx { } if ( $PSVersionTable.Platform -eq 'Unix' ) { - /usr/bin/env sudo $(Get-PowerShellPath) "-noprofile" "-EncodedCommand" $(ConvertTo-Base64 $sudo_cmd) + /usr/bin/env sudo "--preserve-env" $(Get-PowerShellPath) "-noprofile" "-EncodedCommand" $(ConvertTo-Base64 $sudo_cmd) } else { $local:currentIdenity = [System.Security.Principal.WindowsIdentity]::GetCurrent() @@ -437,7 +437,8 @@ $SetupFromWeb = [bool]$(@( $SetupFromWeb, $sfw, $LoadCode ) | Where-Object { $_ if ( -not $SetupFromWeb ) { _setup @PSBoundParameters - Get-Item function:_setup | Remove-Item - Get-Command Reload-MyScripts -ErrorAction SilentlyContinue | ForEach-Object { . $_.Name } + Get-Item function:_setup | Remove-Item -Confirm:$false + Get-Command Reload-MyScripts -ErrorAction SilentlyContinue | + ForEach-Object { . $_.Name -Confirm:$false } } -Remove-Variable SetupFromWeb -ErrorAction SilentlyContinue +Remove-Variable SetupFromWeb -ErrorAction SilentlyContinue -Confirm:$false diff --git a/base/Get-MyModules.ps1 b/base/Get-MyModules.ps1 new file mode 100644 index 0000000..9bb0096 --- /dev/null +++ b/base/Get-MyModules.ps1 @@ -0,0 +1,21 @@ +param([switch]$IgnoreSystem,[switch]$MissingOnly) + +$local:currentSys = @('Always') + ([SystemName]::_GetValidValues('',$true,$true)); + +[MyConfig]::GetConfigPaths('mymodules',$false) | + ForEach-Object { + $local:modules = $( Get-Content $_ | ConvertFrom-Json ); + $modules | + Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name | + Where-Object { + $IgnoreSystem -or ( $_ -in $currentSys ) + } | + ForEach-Object { $modules."$_" } + } | + Where-Object { + -not $MissingOnly -or + $( try { + -not (Get-Module -ListAvailable $_ -ErrorAction stop) + } catch { $true } + ) + } diff --git a/base/Get-Path.ps1 b/base/Get-Path.ps1 index ff35615..08e3bea 100644 --- a/base/Get-Path.ps1 +++ b/base/Get-Path.ps1 @@ -22,7 +22,7 @@ process { '~' { if( $p -match '^~[^/]*' ) { $local:m = $Matches[0] - $p = $p -replace "^$m",((Get-Item $m).FullName) + $p = $p -replace "^$m",((Get-Item -Force $m).FullName) } } } @@ -34,7 +34,13 @@ process { } if( $Expand ) { - $p = $p | Get-Item | Select-Object -ExpandProperty FullName + $p = $p | ForEach-Object { + if( Test-Path $p ) { + $p | Get-Item -Force | Select-Object -ExpandProperty FullName + } else { + $p + } + } } $p diff --git a/base/profile.d/Test-MyModules.ps1 b/base/profile.d/Test-MyModules.ps1 index c2f5ce2..eb34180 100644 --- a/base/profile.d/Test-MyModules.ps1 +++ b/base/profile.d/Test-MyModules.ps1 @@ -1,24 +1,12 @@ param([switch]$Force) -$local:currentSys = [SystemName]::_GetValidValues('',$true,$true); - if( -not $global:MyModulesWarning -or $Force ) { $global:MyModulesWarning = @() } -[MyConfig]::GetConfigPaths('mymodules',$false) | - ForEach-Object { - $local:modules = $( Get-Content $_ | ConvertFrom-Json ); - $modules.Always - $currentSys | ForEach-Object { $modules."$_" } - } | Where-Object { $_ } | Where-Object { - $local:m = $_ - if( $( try { - -not (Get-Module -ListAvailable $m -ErrorAction stop) - } catch { $true } - )) { - $m -notin $global:MyModulesWarning - } +Get-MyModules -MissingOnly | + Where-Object { + $_ -notin $global:MyModulesWarning } | ForEach-Object { $global:MyModulesWarning += $_ Write-Warning "Missing module: $_"