2022-01-18 11:48:49 +00:00
|
|
|
# Put this in the location of $PROFILE. For PowerShell 5+ this is either
|
|
|
|
# C:\Users\USERNAME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
|
|
|
|
# or
|
|
|
|
# C:\Users\USERNAME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
|
|
|
|
|
|
|
|
function Prompt {
|
2023-03-19 22:38:03 +00:00
|
|
|
if ($IsWindows -or ($env:OS -eq "Windows_NT")) {
|
2022-03-02 11:56:41 +00:00
|
|
|
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
|
|
|
|
if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
2024-11-19 12:18:03 +00:00
|
|
|
return "# "
|
2023-03-19 22:38:03 +00:00
|
|
|
}
|
2022-09-08 15:10:57 +00:00
|
|
|
}
|
2024-11-19 12:18:03 +00:00
|
|
|
return "> "
|
2022-01-18 11:48:49 +00:00
|
|
|
}
|
|
|
|
|
2022-03-31 11:51:03 +00:00
|
|
|
function ADUserInfo {
|
2023-06-26 14:16:30 +00:00
|
|
|
param (
|
|
|
|
[Parameter(Mandatory)]
|
|
|
|
[string]$User
|
2022-03-31 11:51:03 +00:00
|
|
|
)
|
|
|
|
Import-Module ActiveDirectory -ErrorAction Stop
|
|
|
|
$ADPropertiesCommon = @(
|
|
|
|
'SamAccountName'
|
|
|
|
'UserPrincipalName'
|
|
|
|
'DisplayName'
|
|
|
|
'Enabled'
|
|
|
|
'PasswordExpired'
|
|
|
|
'LockedOut'
|
|
|
|
'CannotChangePassword'
|
|
|
|
'PasswordNeverExpires'
|
|
|
|
'GivenName'
|
|
|
|
'Surname'
|
|
|
|
'DistinguishedName'
|
|
|
|
'EmployeeID'
|
|
|
|
'Title'
|
|
|
|
'Department'
|
|
|
|
'Created'
|
|
|
|
'Modified'
|
2022-04-01 13:35:40 +00:00
|
|
|
'PasswordLastSet'
|
2022-03-31 11:51:03 +00:00
|
|
|
)
|
|
|
|
$ADPropertiesGetOnly = @(
|
|
|
|
'msDS-UserPasswordExpiryTimeComputed'
|
|
|
|
)
|
|
|
|
$ADPropertiesPrintOnly = @(
|
2023-06-26 14:16:30 +00:00
|
|
|
@{Name = "PasswordExpiresDate"; Expression = { [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") } }
|
2022-03-31 11:51:03 +00:00
|
|
|
)
|
|
|
|
$ADPropertiesGet = $ADPropertiesCommon + $ADPropertiesGetOnly
|
|
|
|
$ADPropertiesPrint = $ADPropertiesCommon + $ADPropertiesPrintOnly
|
|
|
|
Get-ADUser -Properties $ADPropertiesGet -Identity $User | Select-Object -Property $ADPropertiesPrint
|
|
|
|
}
|
|
|
|
|
2023-10-03 07:55:07 +00:00
|
|
|
function mkcd {
|
2023-06-26 14:16:30 +00:00
|
|
|
param (
|
|
|
|
[Parameter(Mandatory)]
|
|
|
|
[string]$Path
|
2023-05-09 13:43:56 +00:00
|
|
|
)
|
|
|
|
New-Item -ItemType Directory -Path $Path
|
|
|
|
Set-Location -Path $Path
|
|
|
|
}
|
|
|
|
|
2024-06-05 09:21:07 +00:00
|
|
|
function Set-AcpLocale {
|
|
|
|
# Set the default en-GB locale.
|
|
|
|
Set-WinUserLanguageList -LanguageList en-GB -Force
|
|
|
|
# Get the default locale back.
|
|
|
|
$AcpLocale = Get-WinUserLanguageList
|
|
|
|
# Remove the British layout and add the US layout.
|
2024-06-05 09:24:45 +00:00
|
|
|
$AcpLocale[0].InputMethodTips.Remove("0809:00000809") | Out-Null
|
|
|
|
$AcpLocale[0].InputMethodTips.Add("0809:00000409") | Out-Null
|
2024-06-05 09:21:07 +00:00
|
|
|
# Set the locale to our customised version.
|
|
|
|
Set-WinUserLanguageList -LanguageList $AcpLocale -Force
|
|
|
|
# Clean up.
|
|
|
|
Remove-Variable AcpLocale
|
|
|
|
}
|
|
|
|
|
2023-10-03 07:55:07 +00:00
|
|
|
if ($IsWindows -or ($env:OS -eq "Windows_NT")) {
|
|
|
|
function who {
|
|
|
|
& "$env:SystemRoot\System32\query.exe" user
|
|
|
|
}
|
2024-01-11 11:30:53 +00:00
|
|
|
|
|
|
|
# Drop elevation privileges.
|
|
|
|
$env:__COMPAT_LAYER = "RunAsInvoker"
|
2023-10-03 07:55:07 +00:00
|
|
|
}
|
|
|
|
|
2024-03-18 13:14:45 +00:00
|
|
|
if ($nvim = Get-Command nvim.exe -ErrorAction SilentlyContinue) {
|
|
|
|
Set-Alias -Name vi -Value $nvim.Source
|
|
|
|
}
|
|
|
|
Remove-Variable -Name nvim
|
|
|
|
|
2024-01-17 08:02:51 +00:00
|
|
|
# Force UTF-8 output.
|
|
|
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
|
|
2024-06-10 06:31:07 +00:00
|
|
|
Set-PSReadLineOption -BellStyle None
|
|
|
|
Set-PSReadLineOption -EditMode Emacs
|
2024-07-01 15:38:19 +00:00
|
|
|
Set-PSReadLineOption -HistorySaveStyle SaveNothing
|
|
|
|
|
2024-09-24 07:19:22 +00:00
|
|
|
Remove-PSReadLineKeyHandler -Chord Tab
|
|
|
|
Set-PSReadLineKeyHandler -Chord UpArrow -ScriptBlock {
|
2022-03-02 11:56:41 +00:00
|
|
|
[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()
|
|
|
|
[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
|
2022-01-18 11:48:49 +00:00
|
|
|
}
|
2024-09-24 07:19:22 +00:00
|
|
|
Set-PSReadLineKeyHandler -Chord DownArrow -ScriptBlock {
|
2022-03-02 11:56:41 +00:00
|
|
|
[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()
|
|
|
|
[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
|
2022-01-18 11:48:49 +00:00
|
|
|
}
|
|
|
|
Set-PSReadLineKeyHandler -Chord Ctrl+LeftArrow -Function BackwardWord
|
|
|
|
Set-PSReadLineKeyHandler -Chord Ctrl+RightArrow -Function ForwardWord
|
|
|
|
Set-PSReadLineKeyHandler -Chord Ctrl+Backspace -Function BackwardKillWord
|
|
|
|
Set-PSReadLineKeyHandler -Chord Ctrl+Delete -Function KillWord
|
2023-07-14 12:04:31 +00:00
|
|
|
Set-PSReadLineKeyHandler -Chord Shift+Spacebar -Function SelfInsert
|
2022-03-02 11:56:41 +00:00
|
|
|
|
2025-01-27 11:48:35 +00:00
|
|
|
# Set terminal to light mode.
|
|
|
|
foreach ($Property in $Host.PrivateData.PSObject.Properties.Name) {
|
|
|
|
if ($Property -match '.*ForegroundColor$') {
|
|
|
|
$Host.PrivateData.$Property = $Host.UI.RawUI.ForegroundColor
|
|
|
|
}
|
|
|
|
if ($Property -match '.*BackgroundColor$') {
|
|
|
|
$Host.PrivateData.$Property = $Host.UI.RawUI.BackgroundColor
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[bool]$LightMode = $true
|
|
|
|
if ($LightMode) {
|
|
|
|
$Host.PrivateData.ErrorForegroundColor = [ConsoleColor]::DarkRed
|
|
|
|
$Host.PrivateData.ErrorBackgroundColor = [ConsoleColor]::White
|
|
|
|
$Host.PrivateData.WarningForegroundColor = [ConsoleColor]::DarkYellow
|
|
|
|
$Host.PrivateData.WarningBackgroundColor = [ConsoleColor]::White
|
|
|
|
$Host.PrivateData.DebugForegroundColor = [ConsoleColor]::DarkYellow
|
|
|
|
$Host.PrivateData.DebugBackgroundColor = [ConsoleColor]::White
|
|
|
|
$Host.PrivateData.VerboseForegroundColor = [ConsoleColor]::DarkYellow
|
|
|
|
$Host.PrivateData.VerboseBackgroundColor = [ConsoleColor]::White
|
|
|
|
$Host.PrivateData.ProgressForegroundColor = [ConsoleColor]::DarkYellow
|
|
|
|
$Host.PrivateData.ProgressBackgroundColor = [ConsoleColor]::White
|
|
|
|
$PSReadLineLightColors = @{
|
2025-01-29 11:54:45 +00:00
|
|
|
Default = "$([char]0x1b)[0m"
|
|
|
|
Command = "$([char]0x1b)[0m"
|
|
|
|
Comment = "$([char]0x1b)[32m"
|
|
|
|
ContinuationPrompt = "$([char]0x1b)[0m"
|
|
|
|
Emphasis = "$([char]0x1b)[36m"
|
|
|
|
Error = "$([char]0x1b)[91m"
|
2025-01-29 12:06:03 +00:00
|
|
|
InlinePrediction = "$([char]0x1b)[95m"
|
2025-01-29 11:54:45 +00:00
|
|
|
Keyword = "$([char]0x1b)[32m"
|
|
|
|
ListPrediction = "$([char]0x1b)[47;90m"
|
|
|
|
ListPredictionSelected = "$([char]0x1b)[100;97m"
|
|
|
|
ListPredictionTooltip = "$([char]0x1b)[45;33m"
|
|
|
|
Member = "$([char]0x1b)[0m"
|
|
|
|
Number = "$([char]0x1b)[31m"
|
|
|
|
Operator = "$([char]0x1b)[90m"
|
|
|
|
Parameter = "$([char]0x1b)[90m"
|
|
|
|
Selection = "$([char]0x1b)[7m"
|
|
|
|
String = "$([char]0x1b)[36m"
|
|
|
|
Type = "$([char]0x1b)[0m"
|
|
|
|
Variable = "$([char]0x1b)[32m"
|
2025-01-27 11:48:35 +00:00
|
|
|
}
|
|
|
|
Set-PSReadLineOption -Colors $PSReadLineLightColors
|
|
|
|
}
|
|
|
|
|
2023-06-26 14:16:42 +00:00
|
|
|
# Keep this at the end.
|
2024-04-26 09:19:50 +00:00
|
|
|
if (Test-Path "$PSScriptRoot/local.ps1") {
|
|
|
|
. "$PSScriptRoot/local.ps1"
|
2023-06-26 14:16:42 +00:00
|
|
|
}
|