|
|
|
@ -1,29 +1,36 @@
|
|
|
|
|
#region keybindings
|
|
|
|
|
Set-PSReadlineKeyHandler -Key Tab -Function Complete
|
|
|
|
|
Set-PSReadlineKeyHandler -Key Ctrl+d -Function ViExit
|
|
|
|
|
if (Get-Module PSReadLine) {
|
|
|
|
|
Set-PSReadlineKeyHandler -Key Tab -Function Complete
|
|
|
|
|
Set-PSReadlineKeyHandler -Key Ctrl+d -Function ViExit
|
|
|
|
|
}
|
|
|
|
|
#endregion keybindings
|
|
|
|
|
|
|
|
|
|
#region prompt dependencies
|
|
|
|
|
#set part of the prompt beforehand to optimize the prompt function
|
|
|
|
|
#region prompt
|
|
|
|
|
# set part of the prompt beforehand to optimize the prompt function
|
|
|
|
|
|
|
|
|
|
#depending on elevated permissions change the delimiter
|
|
|
|
|
$identity = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
|
|
|
|
|
if($identity.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
|
|
|
|
$delimiter = '#'
|
|
|
|
|
} else {
|
|
|
|
|
$delimiter = '$'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$username = $env:USERNAME.ToLower()
|
|
|
|
|
$computername = $env:COMPUTERNAME.ToLower()
|
|
|
|
|
#endregion prompt dependencies
|
|
|
|
|
# depending on elevated permissions change the delimiter
|
|
|
|
|
# prefix variables with random strings to avaid collissions
|
|
|
|
|
function prompt {
|
|
|
|
|
#shorten path with tilde if possible
|
|
|
|
|
#uses .Replace() to prevent regex
|
|
|
|
|
$cwd = (Get-Location).Path.Replace($HOME,'~')
|
|
|
|
|
$identity = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
|
|
|
|
|
if($identity.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
|
|
|
|
$delimiter = '#'
|
|
|
|
|
} else {
|
|
|
|
|
$delimiter = '$'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
'[{0}@{1} {2}]{3} ' -f $username,$computername,$cwd,$delimiter
|
|
|
|
|
# shorten path with tilde if possible
|
|
|
|
|
# uses .Replace() to prevent regex
|
|
|
|
|
$homePath = if ($HOME) {
|
|
|
|
|
$HOME
|
|
|
|
|
} elseif ($env:USERPROFILE) {
|
|
|
|
|
$env:USERPROFILE
|
|
|
|
|
}
|
|
|
|
|
$cwd = (Get-Location).Path.Replace($homePath,'~')
|
|
|
|
|
|
|
|
|
|
'[{0}@{1} {2}]{3} ' -f $env:USERNAME.ToLower(),$env:COMPUTERNAME.ToLower(),$cwd,$delimiter
|
|
|
|
|
}
|
|
|
|
|
#endregion prompt
|
|
|
|
|
|
|
|
|
|
function Get-BADUser {
|
|
|
|
|
param (
|
|
|
|
|
[Parameter(Mandatory=$true,
|
|
|
|
@ -114,14 +121,30 @@ function Get-Feierabend {
|
|
|
|
|
|
|
|
|
|
$Begin.AddHours($Hours).AddMinutes($Minutes).Add($PauseEnd - $PauseStart)
|
|
|
|
|
}
|
|
|
|
|
function fsh {
|
|
|
|
|
function wsh {
|
|
|
|
|
param (
|
|
|
|
|
[string]$ComputerName
|
|
|
|
|
[Parameter(Mandatory, Position = 0)]
|
|
|
|
|
[String]
|
|
|
|
|
$ComputerName
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
$host.UI.RawUI.WindowTitle = $ComputerName
|
|
|
|
|
|
|
|
|
|
Enter-PSSession @PSBoundParameters @args
|
|
|
|
|
$profileContent = (
|
|
|
|
|
(
|
|
|
|
|
$PROFILE | Get-Member | Where-Object MemberType -eq 'NoteProperty' | ForEach-Object {
|
|
|
|
|
Get-Content $PROFILE.($_.Name) -ErrorAction SilentlyContinue
|
|
|
|
|
}
|
|
|
|
|
) | Where-Object {$_ -notmatch '^(#|$)'}
|
|
|
|
|
) -join "`n"
|
|
|
|
|
$scriptBlock = [scriptblock]::Create($profileContent)
|
|
|
|
|
|
|
|
|
|
if (!($session = Get-PSSession -ComputerName $ComputerName -Name 'wsh*' -ErrorAction SilentlyContinue | Where-Object Availability -eq 'Available' | Select-Object -First 1)) {
|
|
|
|
|
$session = New-PSSession -ComputerName $ComputerName -Name ('wsh'+(Get-Random))
|
|
|
|
|
Invoke-Command -Session $session -Command $scriptBlock
|
|
|
|
|
Invoke-Command -Session $session -Command {Set-Location ~}
|
|
|
|
|
}
|
|
|
|
|
Enter-PSSession $session
|
|
|
|
|
}
|
|
|
|
|
function watch {
|
|
|
|
|
param (
|
|
|
|
|