# 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 { if ($IsWindows -or ($env:OS -eq "Windows_NT")) { $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { return "# " } } return "> " } function ADUserInfo { param ( [Parameter(Mandatory)] [string]$User ) Import-Module ActiveDirectory -ErrorAction Stop $ADPropertiesCommon = @( 'SamAccountName' 'UserPrincipalName' 'DisplayName' 'Enabled' 'PasswordExpired' 'LockedOut' 'CannotChangePassword' 'PasswordNeverExpires' 'GivenName' 'Surname' 'DistinguishedName' 'EmployeeID' 'Title' 'Department' 'Created' 'Modified' 'PasswordLastSet' ) $ADPropertiesGetOnly = @( 'msDS-UserPasswordExpiryTimeComputed' ) $ADPropertiesPrintOnly = @( @{Name = "PasswordExpiresDate"; Expression = { [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") } } ) $ADPropertiesGet = $ADPropertiesCommon + $ADPropertiesGetOnly $ADPropertiesPrint = $ADPropertiesCommon + $ADPropertiesPrintOnly Get-ADUser -Properties $ADPropertiesGet -Identity $User | Select-Object -Property $ADPropertiesPrint } function mkcd { param ( [Parameter(Mandatory)] [string]$Path ) New-Item -ItemType Directory -Path $Path Set-Location -Path $Path } 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. $AcpLocale[0].InputMethodTips.Remove("0809:00000809") | Out-Null $AcpLocale[0].InputMethodTips.Add("0809:00000409") | Out-Null # Set the locale to our customised version. Set-WinUserLanguageList -LanguageList $AcpLocale -Force # Clean up. Remove-Variable AcpLocale } if ($IsWindows -or ($env:OS -eq "Windows_NT")) { function who { & "$env:SystemRoot\System32\query.exe" user } # Drop elevation privileges. $env:__COMPAT_LAYER = "RunAsInvoker" } if ($nvim = Get-Command nvim.exe -ErrorAction SilentlyContinue) { Set-Alias -Name vi -Value $nvim.Source } Remove-Variable -Name nvim # Force UTF-8 output. $OutputEncoding = [System.Text.Encoding]::UTF8 Set-PSReadLineOption -BellStyle None Set-PSReadLineOption -EditMode Emacs Set-PSReadLineOption -HistorySaveStyle SaveNothing Remove-PSReadLineKeyHandler -Chord Tab Set-PSReadLineKeyHandler -Chord UpArrow -ScriptBlock { [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward() [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine() } Set-PSReadLineKeyHandler -Chord DownArrow -ScriptBlock { [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward() [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine() } 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 Set-PSReadLineKeyHandler -Chord Shift+Spacebar -Function SelfInsert # 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 } } function Set-AntDarkMode { if ($PSVersionTable.PSVersion.Major -le 5) { # $PSStyle doesn't exist in PowerShell 5.1, so import the external module. Import-Module -Name PSStyle } $DefaultTheme = @{ Command = "$([char]0x1b)[93m" Comment = "$([char]0x1b)[32m" ContinuationPrompt = "$([char]0x1b)[33m" Default = "$([char]0x1b)[33m" Emphasis = "$([char]0x1b)[96m" Error = "$([char]0x1b)[91m" InlinePrediction = "$([char]0x1b)[38;5;238m" Keyword = "$([char]0x1b)[92m" ListPrediction = "$([char]0x1b)[33m" ListPredictionSelected = "$([char]0x1b)[48;5;238m" ListPredictionTooltip = "$([char]0x1b)[38;5;238m" Member = "$([char]0x1b)[37m" Number = "$([char]0x1b)[97m" Operator = "$([char]0x1b)[90m" Parameter = "$([char]0x1b)[90m" Selection = "$([char]0x1b)[35;43m" String = "$([char]0x1b)[36m" Type = "$([char]0x1b)[37m" Variable = "$([char]0x1b)[92m" } $PSStyle.Formatting.FormatAccent = "$([char]0x1b)[32;1m" $PSStyle.Formatting.TableHeader = "$([char]0x1b)[32;1m" $PSStyle.Formatting.ErrorAccent = "$([char]0x1b)[36;1m" $PSStyle.Formatting.Error = "$([char]0x1b)[31;1m" $PSStyle.Formatting.Warning = "$([char]0x1b)[33;1m" $PSStyle.Formatting.Verbose = "$([char]0x1b)[33;1m" $PSStyle.Formatting.Debug = "$([char]0x1b)[33;1m" $PSStyle.Progress.Style = "$([char]0x1b)[33;1m" $PSStyle.FileInfo.Directory = "$([char]0x1b)[44;1m" $PSStyle.FileInfo.SymbolicLink = "$([char]0x1b)[36;1m" $PSStyle.FileInfo.Executable = "$([char]0x1b)[32;1m" Set-PSReadLineOption -Colors $DefaultTheme } function Set-AntLightMode { # https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/using-light-theme if ($PSVersionTable.PSVersion.Major -le 5) { # $PSStyle doesn't exist in PowerShell 5.1, so import the external module. Import-Module -Name PSStyle } $ISETheme = @{ Command = $PSStyle.Foreground.FromRGB(0x0000FF) Comment = $PSStyle.Foreground.FromRGB(0x006400) ContinuationPrompt = $PSStyle.Foreground.FromRGB(0x0000FF) Default = $PSStyle.Foreground.FromRGB(0x0000FF) Emphasis = $PSStyle.Foreground.FromRGB(0x287BF0) Error = $PSStyle.Foreground.FromRGB(0xE50000) InlinePrediction = $PSStyle.Foreground.FromRGB(0x93A1A1) Keyword = $PSStyle.Foreground.FromRGB(0x00008b) ListPrediction = $PSStyle.Foreground.FromRGB(0x06DE00) Member = $PSStyle.Foreground.FromRGB(0x000000) Number = $PSStyle.Foreground.FromRGB(0x800080) Operator = $PSStyle.Foreground.FromRGB(0x757575) Parameter = $PSStyle.Foreground.FromRGB(0x000080) String = $PSStyle.Foreground.FromRGB(0x8b0000) Type = $PSStyle.Foreground.FromRGB(0x008080) Variable = $PSStyle.Foreground.FromRGB(0xff4500) ListPredictionSelected = $PSStyle.Background.FromRGB(0x93A1A1) Selection = $PSStyle.Background.FromRGB(0x00BFFF) } $PSStyle.Formatting.FormatAccent = "$([char]0x1b)[32m" $PSStyle.Formatting.TableHeader = "$([char]0x1b)[32m" $PSStyle.Formatting.ErrorAccent = "$([char]0x1b)[36m" $PSStyle.Formatting.Error = "$([char]0x1b)[31m" $PSStyle.Formatting.Warning = "$([char]0x1b)[33m" $PSStyle.Formatting.Verbose = "$([char]0x1b)[33m" $PSStyle.Formatting.Debug = "$([char]0x1b)[33m" $PSStyle.Progress.Style = "$([char]0x1b)[33m" $PSStyle.FileInfo.Directory = $PSStyle.Background.FromRgb(0x2f6aff) + $PSStyle.Foreground.BrightWhite $PSStyle.FileInfo.SymbolicLink = "$([char]0x1b)[36m" $PSStyle.FileInfo.Executable = "$([char]0x1b)[95m" if ($PSVersionTable.PSVersion.Major -gt 5) { $PSStyle.FileInfo.Extension['.ps1'] = "$([char]0x1b)[36m" $PSStyle.FileInfo.Extension['.ps1xml'] = "$([char]0x1b)[36m" $PSStyle.FileInfo.Extension['.psd1'] = "$([char]0x1b)[36m" $PSStyle.FileInfo.Extension['.psm1'] = "$([char]0x1b)[36m" } Set-PSReadLineOption -Colors $ISETheme } Set-AntLightMode # Keep this at the end. if (Test-Path "$PSScriptRoot/local.ps1") { . "$PSScriptRoot/local.ps1" }