dotfiles/PS/PowerShellProfile.ps1
2020-06-17 17:34:07 -05:00

93 lines
2.7 KiB
PowerShell

# My powershell profile.
# customize the prompt to be a little more useful
function prompt {
Write-Host -NoNewLine "["
Write-Host -NoNewLine -Fore Green ("{0:HH}:{0:mm}" -f $(get-date))
Write-Host -NoNewLine "] "
Write-Host -Fore Cyan "${pwd}"
"PS> "
}
<#
.Synopsis
Invoke a scriptblock with evelvated permissions.
#>
function Invoke-Elevated {
param (
[ScriptBlock]
$code
)
$outTmpFile = [System.IO.Path]::GetTempFileName()
$errTmpFile = [System.IO.Path]::GetTempFileName()
$code | Write-Output
$outTmpFile | Write-Output
$errTmpFile | Write-Output
# TODO(jwall): Work on figuring out how to properly redirect output here
Start-Process powershell.exe -ArgumentList { &$code 1>$outTmpFile 2>$errTmpFile } -WindowStyle hidden -Verb RunAs
Get-Content $outTmpFile | Write-Output
Get-Content $errTmpFile | Write-Output
Remove-Item $outTmpFile
Remove-Item $errTmpFile
}
<#
.Synopsis
Returns true if you are running with elevated privileges.
#>
function Get-Elevated {
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
<#
.Synopsis
Create a symlink from a source to a destination.
.Description
Creates a symlink from a $Source to a $Destination.
Automatically elevates to administrator privileges
if necessary.
.Parameter Source
Required source to create the symlink from.
.Parameter Destination
Required destination to create the symlink at.
#>
function New-Link {
param (
[Parameter(Position=0, Mandatory=$true)]
[string[]]
$Source,
[Parameter(Position=1, Mandatory=$true)]
[string[]]
$Destination
)
# This is a bit of a hack but it's necessary until they make it possible
# to do symbolic links without administrator privileges
if (Get-Elevated) {
New-Item -ItemType SymbolicLink -Path $Destination -Target $Source
} else {
# Elevate our permissions for this first.
Invoke-Elevated {
New-Item -ItemType SymbolicLink -Path $Destination -Target $Source
}
}
}
function grep {
$input | out-string -stream | select-string $args
}
# It's way more useful to call this open than ii
Set-Alias -Name open -Value Invoke-Item
Set-Alias -Name ln -Value New-Link
Set-Alias -name which -Value Get-Command
# Add make to our powershell path
$env:PATH="$env:PATH;C:\Program Files (x86)\GnuWin32\bin;C:\Users\jerem\AppData\Local\Julia-1.3.0\bin"