Windows PowerShell: thay đổi dấu nhắc lệnh


84

Sử dụng Windows PowerShell, làm cách nào để thay đổi dấu nhắc lệnh?

Ví dụ: lời nhắc mặc định cho biết

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

Tôi muốn tùy chỉnh chuỗi đó.

Câu trả lời:


107

Chỉ cần đặt hàm prompttrong hồ sơ PowerShell của bạn ( notepad $PROFILE), ví dụ:

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

hoặc màu:

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

2
notepad $PROFILEkhông hoạt động trong Windows 7 từ lời nhắc quyền hạn của quản trị viên
jcollum

18
Ahh, tôi thấy rằng bạn cần tạo hồ sơ cá nhân đầu tiên:new-item -itemtype file -path $profile -force
jcollum

4
Lưu ý: Bạn chỉ có thể dán hàm nhắc vào powershell để thay đổi đường dẫn nhắc thay vì lưu hàm trong hồ sơ của mình, nhưng bạn sẽ phải làm điều này mỗi khi khởi chạy powershell.
Trận chiến Larry

3
Bạn cũng cần chạy Powershell với tư cách quản trị viên và thực hiện Set-ExecutionPolicy RemoteSigned.
qed

1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictednếu bạn chỉ muốn thay đổi cho người dùng hiện tại hoặc không thể chạy với tư cách quản trị viên.
cz

21

Liên quan đến nhận xét cho câu trả lời của Ocaso Protal , phần sau là cần thiết cho Windows Server 2012 cũng như Windows 7 (trong cửa sổ PowerShell):

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

Tôi sẽ đề xuất những điều sau như một lời nhắc nếu bạn chạy với nhiều tên người dùng (ví dụ: chính bạn + đăng nhập sản xuất):

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

(Tín dụng thuộc về David I. McIntosh cho cái này.)


1
Bạn cũng cần chạy Powershell với tư cách quản trị viên và thực hiện Set-ExecutionPolicy RemoteSigned.
qed

11

Tại dấu nhắc, tôi thích một dấu thời gian hiện tại và các ký tự ổ đĩa đã được giải quyết cho các ổ đĩa mạng. Để làm cho nó dễ đọc hơn, tôi đặt nó thành hai dòng và chơi một chút với màu sắc.

Với CMD, tôi đã kết thúc với

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

Đối với PowerShell, tôi nhận được kết quả tương tự với:

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 " "
}

Cái nào dễ đọc hơn một chút :-)

BTW:

  • Tôi thích powershell_ise.exe $PROFILEthay vì (câm) Notepad .
  • Nếu bạn muốn gỡ lỗi prompt () của mình bằng các điểm ngắt, bạn nên đổi tên hàm nhắc thành bất kỳ thứ gì khác (hoặc thử nó trong tệp khác). Nếu không, bạn có thể gặp phải một vòng lặp: Khi bạn dừng gỡ lỗi, thì prompt () lại được gọi và bạn lại dừng lại ở điểm ngắt. Khá khó chịu, lúc đầu ...

Chỉ cần những gì tôi đang tìm kiếm!
Glen Little

8

Nếu bạn muốn tự mình làm điều đó, thì câu trả lời của Ocaso Protal là con đường để đi. Nhưng nếu bạn lười biếng như tôi và chỉ muốn một cái gì đó làm cho bạn, thì tôi thực sự khuyên bạn nên dùng gói Pshazz của Luke Sampson .

Để cho bạn thấy bạn có thể lười đến mức nào, tôi sẽ cung cấp một hướng dẫn nhanh.

  • Cài đặt Pshazz bằng Scoop ( scoop install pshazz)
  • Sử dụng một chủ đề đẹp được xác định trước ( pshazz use msys)
  • Uống bia (gốc)

Pshazz cũng cho phép bạn tạo các chủ đề của riêng mình, đơn giản như định cấu hình tệp JSON. Kiểm tra của tôi để xem nó dễ dàng như thế nào!


7

Để chỉ hiển thị ký tự ổ đĩa tôi sử dụng:

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

Sau đó, để hoàn nguyên về đường dẫn tôi sử dụng:

            function prompt {"$pwd>"}

5

Phiên bản câu trả lời này của Warren Stevens tránh "Microsoft.PowerShell.Core \ FileSystem" ồn ào trong đường dẫn nếu bạn Set-Locationchia sẻ mạng.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.