Windows PowerShell: การเปลี่ยนพรอมต์คำสั่ง


86

เมื่อใช้ Windows PowerShell ฉันจะเปลี่ยนพรอมต์คำสั่งได้อย่างไร

ตัวอย่างเช่นพรอมต์เริ่มต้นระบุว่า

PS C:\Documents and Settings\govendes\My Documents>

ฉันต้องการปรับแต่งสตริงนั้น

คำตอบ:


110

เพียงใส่ฟังก์ชันpromptในโปรไฟล์ PowerShell ของคุณ ( notepad $PROFILE) เช่น:

function prompt {"PS: $(get-date)>"}

หรือสี:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}

3
notepad $PROFILEไม่ทำงานใน Windows 7 จากพรอมต์พาวเวอร์
เชลล์ของ

19
อ่าฉันเห็นว่าคุณต้องสร้างโปรไฟล์ก่อน:new-item -itemtype file -path $profile -force
jcollum

4
หมายเหตุ: คุณสามารถวางฟังก์ชันพรอมต์ใน powershell เพื่อเปลี่ยนเส้นทางพร้อมต์แทนที่จะบันทึกฟังก์ชันในโปรไฟล์ของคุณ แต่คุณจะต้องทำสิ่งนี้ทุกครั้งที่คุณเปิดใช้ powershell
Larry Battle

3
นอกจากนี้คุณยังจำเป็นต้องเรียกใช้ Powershell Set-ExecutionPolicy RemoteSignedเป็นผู้ดูแลและทำ
qed

1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedหากคุณต้องการเปลี่ยนเฉพาะสำหรับผู้ใช้ปัจจุบันหรือไม่สามารถเรียกใช้ในฐานะผู้ดูแลระบบได้
cz

21

เกี่ยวข้องกับความคิดเห็นต่อคำตอบของ Ocaso Protalสิ่งต่อไปนี้จำเป็นสำหรับ Windows Server 2012 และ Windows 7 (ในหน้าต่าง PowerShell):

new-item -itemtype file -path $profile -force
notepad $PROFILE

ฉันขอแนะนำสิ่งต่อไปนี้เป็นข้อความแจ้งหากคุณเรียกใช้ด้วยชื่อผู้ใช้หลายชื่อ (เช่นตัวคุณเอง + ล็อกอินที่ใช้งานจริง):

function Global:prompt {"PS [$Env:username]$PWD`n>"} 

(เครดิตไปที่ David I. McIntosh สำหรับเรื่องนี้)


1
นอกจากนี้คุณยังจำเป็นต้องเรียกใช้ Powershell Set-ExecutionPolicy RemoteSignedเป็นผู้ดูแลและทำ
qed

11

เมื่อได้รับแจ้งฉันชอบการประทับเวลาปัจจุบันและแก้ไขอักษรระบุไดรฟ์สำหรับไดรฟ์เครือข่าย เพื่อให้อ่านง่ายขึ้นฉันวางไว้ในสองบรรทัดและเล่นด้วยสีเล็กน้อย

ด้วย CMD ฉันลงเอยด้วย

PROMPT=$E[33m$D$T$H$H$H$S$E[37m$M$_$E[1m$P$G

สำหรับ PowerShell ฉันได้ผลลัพธ์เดียวกันกับ:

function prompt {
    $dateTime = get-date -Format "dd.MM.yyyy HH:mm:ss"
    $currentDirectory = $(Get-Location)
    $UncRoot = $currentDirectory.Drive.DisplayRoot

    write-host "$dateTime" -NoNewline -ForegroundColor White
    write-host " $UncRoot" -ForegroundColor Gray
    # Convert-Path needed for pure UNC-locations
    write-host "PS $(Convert-Path $currentDirectory)>" -NoNewline -ForegroundColor Yellow
    return " "
}

ที่ :-) น่าอ่านกว่านิดหน่อย

BTW:

  • ฉันชอบpowershell_ise.exe $PROFILEแทน (ใบ้) Notepad
  • หากคุณต้องการดีบัก prompt () ของคุณด้วยเบรกพอยต์คุณควรเปลี่ยนชื่อฟังก์ชัน prompt เป็นอย่างอื่น (หรือลองใช้ในไฟล์อื่น) มิฉะนั้นคุณอาจวนซ้ำ: เมื่อคุณหยุดการดีบักระบบจะเรียก prompt () อีกครั้งและหยุดที่เบรกพอยต์อีกครั้ง ค่อนข้างระคายเคืองในตอนแรก ...

สิ่งที่ฉันกำลังมองหา!
Glen Little

8

หากคุณต้องการทำด้วยตัวเองคำตอบของ Ocaso Protalคือหนทางที่จะไป แต่ถ้าคุณขี้เกียจเหมือนผมและต้องการเพียงแค่บางสิ่งบางอย่างที่จะทำมันสำหรับคุณแล้วผมขอแนะนำแพคเกจ Pshazz ลุคของจอห์น

เพื่อแสดงให้คุณเห็นว่าคุณขี้เกียจแค่ไหนฉันจะจัดทำบทแนะนำสั้น ๆ

  • ติดตั้ง Pshazz ด้วยScoop ( scoop install pshazz)
  • ใช้ธีมที่กำหนดไว้ล่วงหน้าที่ดี ( pshazz use msys)
  • ดื่มเบียร์ (ราก)

Pshazz ยังช่วยให้คุณสร้างธีมของคุณเองซึ่งทำได้ง่ายเพียงแค่กำหนดค่าไฟล์ JSON ตรวจสอบของฉันเพื่อดูว่ามันง่ายแค่ไหน!


7

ในการแสดงอักษรระบุไดรฟ์ที่ฉันใช้:

            function prompt {(get-location).drive.name+"\...>"}

จากนั้นเพื่อย้อนกลับไปยังเส้นทางที่ฉันใช้:

            function prompt {"$pwd>"}

5

คำตอบของWarren Stevensเวอร์ชันนี้จะหลีกเลี่ยง "Microsoft.PowerShell.Core \ FileSystem" ที่มีเสียงดังในเส้นทางหากคุณSet-Locationใช้เครือข่ายร่วมกัน

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.