PS /> Get-Host Name : ConsoleHost Version : 7.3.0 InstanceId : c3f625f0-dad8-4325-a0a1-f6499afecb8a UI : System.Management.Automation.Internal.Host.InternalHostUserInte rface CurrentCulture : en-GB CurrentUICulture : en-GB PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace
Function Write-Color { Param ( [ValidateNotNullOrEmpty()] [string] $newColor ) $oldColor = $host.UI.RawUI.ForegroundColor $host.UI.RawUI.ForegroundColor = $newColor If ($args) { Write-Output $args } Else { $input | Write-Output } $host.UI.RawUI.ForegroundColor = $oldColor }
# macOS PS /{current_dir}> # Windows PS C:\>
PS /> function prompt { "Hello, World > " } Hello, World >
PS /> Function prompt { Get-Process Slack }
System.Diagnostics.Process (Slack)
function prompt { $time = (Get-Date).ToShortTimeString() "$time $([net.dns]::GetHostName()):> " } # eg: 11:00 Sirwans-MacBook-Pro.local:>
Function Write-Branch { If (Test-Path .git) { $branch = git branch --show-current $lastCommitAuthor = git log -1 --pretty=format:"%an" If ($null -ne $lastCommitAuthor) { Return "($branch - latest commit written by 🤦👉 $lastCommitAuthor)" } Return "($branch)" } Else { "Not in a git repo" } } Function Prompt { $CurrentDirectory = Split-Path -Path $pwd -Leaf Write-Host "`nPS " -NoNewline -ForegroundColor Cyan Write-Host $($CurrentDirectory) -NoNewline -ForegroundColor Green Write-Host " $(Write-Branch) " -NoNewline -ForegroundColor Yellow Return '> ' }
ذخیرهسازی تقییرات شل درون پروفایل
نکتهایی که باید به آن دقت داشته باشید این است که تغییرات، تنها برای سشن جاری ذخیره خواهند شد و به محض بستن سشن، این تغییرات از حافظه پاک خواهند شد. همانطور که در قسمت قبل نیز اشاره شد، برای اینکه تغییرات را همیشه موقع باز کردن شل مشاهده کنیم، باید کدها را درون پروفایل ذخیره کنیم. به این معنا که هر وقت PowerShell را باز کنیم، توابع و کدهایی که درون پروفایل تعریف شده باشند، به صورت سراسری قابل استفاده خواهند بود. توسط متغیر خودکار Profile$ میتوانیم پروفایل جاری را مشاهده کنیم:
PS /> $Profile {HOME_USER}/.config/powershell/Microsoft.PowerShell_profile.ps1
دقت داشته باشید که پرفایل فوق، برای Host جاری و همچنین کاربر جاری میباشد. به این معنا که محتویات داخل این پروفایل، تاثیری در دیگر شلهایی که توسط اپلیکیشنهای دیگر میزبانی میشوند ندارد. توسط دستور زیر میتوانید لیست پروفایلها را مشاهده نمائید:
PS /> $PROFILE | Get-Member -Type NoteProperty | Select-Object Name, Value Name Value ---- ----- AllUsersAllHosts AllUsersCurrentHost CurrentUserAllHosts CurrentUserCurrentHost
مسیر هر کدام از پروفایلهای فوق را میتوانید در اینجا مشاهده نمائید. همچنین توسط پرچم NoProfile- میتوانیم PowerShell را بدون بارگذاری هیچ پروفایلی باز کنیم:
pwsh -NoProfile
بنابراین برای ذخیرهی تغییرات قبل، میتوانیم توابع تعریف شده را درون پروفایل موردنظر قرار دهیم، تا با هربار باز شدن سشن، کدهای موردنظر قابل استفاده باشند:
PS /> code $PROFILE.CurrentUserCurrentHost Function Write-Branch { # As before } Function Prompt { # As before }
اگر از ماژول Posh برای تغییر ظاهر PowerShell استفاده کرده باشید، متوجه خواهید شد که این ماژول نیز به همین روال کار میکند؛ یعنی با هربار باز شدن سشن، این دستور برای بارگذاری Prompt سفارشی فراخوانی خواهد شد:
oh-my-posh init pwsh | Invoke-Expression