Cách tạo bí danh PowerShell vĩnh viễn


141

Tôi muốn tạo aliasmột cmdletcái không hết hạn sau khi tôi đóng phiên Powershell hiện tại, giả sử tôi có bí danh này:

C:\Users\Aymen> New-Alias Goto Set-Location

Điều này hoàn toàn tạo ra Gotobí danh, nhưng tôi muốn sử dụng nó ngay cả sau khi tôi đóng phiên hiện tại, làm thế nào tôi có thể đạt được điều đó.

Ghi chú:

Hệ thống Trợ giúp PowerShell gợi ý rằng tôi có thể xuất các bí danh mà tôi tạo và nhập chúng vào lần tới khi tôi mở một phiên mới, thực sự đó không phải là điều tôi đang tìm kiếm, có một cách rõ ràng trực tiếp để giữ bí danh sau tôi tạo nó thông qua các phiên khác nhau


IMO bạn tốt hơn nhiều khi đưa các tập lệnh vào PATH. Bằng cách đó, lệnh sẽ có sẵn ngay lập tức cho tất cả các shell mở của bạn và nếu bạn thay đổi nó, thay đổi sẽ lan truyền đến tất cả các lần sử dụng tiếp theo mà không phải tải lại hồ sơ $ hoặc thứ gì đó.
masterxilo

Câu trả lời:


112

CẬP NHẬT - Tháng 1 năm 2017

Có thể lưu trữ trong một profile.ps1tập tin bất kỳ mã powershell nào sẽ được thực thi mỗi khi powershell bắt đầu. Có ít nhất 6 đường dẫn khác nhau để lưu mã tùy thuộc vào người dùng nào phải thực thi mã. Chúng tôi chỉ có thể xem xét 2 trong số đó: đường dẫn "tất cả người dùng" và "chỉ người dùng của bạn".

Vì vậy, để trả lời câu hỏi của bạn, bạn chỉ phải tạo một profile.ps1tệp chứa mã bạn muốn được thực thi, đó là

New-Alias Goto Set-Location

và lưu nó trong đường dẫn thích hợp:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): chỉ người dùng của bạn mới thực thi mã.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): mọi người dùng sẽ thực thi mã.

Để áp dụng các thay đổi, đóng tất cả các phiên bản quyền hạn mở và khởi động lại chúng.

LỜI KHUYÊN

  • Nếu cả hai đường dẫn chứa một profile.ps1tệp, tất cả người dùng sẽ được thực thi trước, sau đó người dùng cụ thể.

  • Luôn đặt mã trong hồ sơ cụ thể của người dùng nếu không cần phải mở rộng thực thi cho mỗi người dùng. Bạn không cần quyền quản trị viên để thêm tệp vào không gian người dùng của bạn (nếu không thì bạn) và bạn không làm ô nhiễm không gian của người dùng khác.

  • NHỚ LẠI! Đường $PsHomedẫn khác nhau giữa các phiên bản 32 bit và 64 bit của powershell, vì vậy bạn phải xem xét cả hai môi trường nếu bạn luôn muốn thực thi mã hồ sơ. Thông thường các đường dẫn C:\Windows\System32\WindowsPowerShell\v1.0dành cho môi trường 64 bit và C:\Windows\SysWow64\WindowsPowerShell\v1.032 bit.


9
không có lỗi nó chỉ không hoạt động, tôi không chắc đây có phải là vấn đề quyền hay không. Tôi đã thực sự làm cho nó hoạt động (tôi nên bình luận trước đó). Tôi đã phải tạo thư mục \Users\{ME}\Documents\WindowsPowerShellvà sau đó thêm Microsoft.PowerShell_profile.ps1không phải các đường dẫn khác hoạt động cho tôi.

2
Theo bài viết được liên kết bằng cách sử dụng "$HOME\Documents\WindowsPowerShell"và đặt tên Microsoft.PowerShell_profile.ps1giới hạn phạm vi đối với không phải ISE và máy chủ hiện tại, nhưng không nên là vấn đề của quyền (cùng của "$Home\Documents\profile.ps1" should apply). Có lẽ nó không thực sự như vậy, tôi sẽ thử, cảm ơn bạn vì thông tin
Naigel 9/2/2016

2
Xin chào @Naigel, tôi phải sử dụng phương pháp này để làm cho nó hoạt động: superuser.com/questions/516700/ vì vậy giải pháp cuối cùng cho tôi là tạo tệp cho hồ sơ: New-Item -path $profile -type file -forceđã tạo thư mục và tệpDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
Cách tốt nhất để có được vị trí hồ sơ có thể là chạy "echo $ profile" trong cửa sổ powershell của bạn.
Rahul Jha

2
Hãy nhớ tạo bản sao lưu tệp profile.ps1 của bạn, vì Windows Creators Update dường như xóa tệp ở vị trí mặc định của nó !!
gooleem

109

Không nên thêm trực tiếp loại điều này vào các $env:WINDIRthư mục powershell của bạn .
Cách được đề xuất là thêm nó vào hồ sơ cá nhân của bạn:

cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1

Bây giờ hãy thêm bí danh của bạn vào tệp Microsoft.PowerShell_profile.ps1 hiện đang được mở:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Sau đó lưu nó và làm mới phiên hiện tại với:

. $profile

Lưu ý: Chỉ trong trường hợp, nếu bạn gặp vấn đề về quyền như

CategoryInfo: SecurityError: (:) [], PSSecurityException + FullQualifiedErrorId: Un tráiAccess

Hãy thử lệnh dưới đây và làm mới phiên một lần nữa.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
Nhận xét tuyệt vời. Rất rõ ràng, mặc dù sức mạnh của tôi không có liên lạc.
JustinB

9
Để cho phép thực thi kịch bản hồ sơ của tôi, tôi phải thực hiện thêm một bước nữa. Chạy Powershell với tư cách Quản trị viên và thực thi Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Các -Scopetùy chọn làm cho nó an toàn hơn một chút.
zombat

2
Đây là một phương pháp tuyệt vời! Xin lưu ý rằng chức năng này cũng có sẵn trong trình bao, vì vậy bạn không thực sự cần phần Set-Alias. Chỉ cần gọi hàm MyAlias. Ngoài ra, để truyền lại lập luận, sử dụng @Args, ví dụ nhưfunction gs { git status @Args }
Automatico

3
@Automatico Tôi thích được nói rõ về Set-Aliasvì tôi thích đặt tên cho các phương thức của mình bằng cách sử dụng các quy ước PS thích hợp với các Động từ thích hợp. Nhưng có, nếu bạn không kén chọn, bạn có thể đặt tên cho phương thức của mình bất cứ điều gì bạn định gọi.
Chase Florell

1
@zombat Đây chính xác là tôi đã vật lộn với hàng giờ. Cảm ơn bạn, tôi đã làm xong bây giờ.
jawad mansoor

28

2018, Windows 10

Bạn có thể liên kết đến bất kỳ tệp hoặc thư mục nào với sự trợ giúp của tập lệnh PowerShell đơn giản.

Viết một tập lệnh phím tắt

Mở Windows PowerShell ISE. Trong khung script viết:

New-Alias ${shortcutName} ${fullFileLocation}

Sau đó đi đến khung dòng lệnh. Tìm địa chỉ hồ sơ người dùng PowerShell của bạn với echo $profile. Lưu tập lệnh trong địa chỉ này.

nhập mô tả hình ảnh ở đây

Tập lệnh trong địa chỉ hồ sơ của PowerShell sẽ chạy mỗi khi bạn mở powershell. Phím tắt sẽ hoạt động với mọi cửa sổ PowerShell mới.

Viết một kịch bản phím tắt thư mục

Nó đòi hỏi một dòng khác trong kịch bản của chúng tôi.

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction} 

Phần còn lại là hoàn toàn giống nhau.

nhập mô tả hình ảnh ở đây

Kích hoạt tập lệnh PowerShell

Theo mặc định, tập lệnh PowerShell bị chặn. Để bật chúng, hãy mở cài đặt -> Cập nhật & Bảo mật -> Dành cho nhà phát triển. Chọn Chế độ nhà phát triển (có thể yêu cầu khởi động lại). Chọn Chế độ nhà phát triển Windows 10.

Cuộn xuống phần PowerShell, đánh dấu vào tùy chọn "Thay đổi chính sách thực thi ..." và áp dụng.

Kích hoạt tập lệnh PowerShell


2
echo $profilelà một mẹo tuyệt vời để giúp tìm vị trí chính xác để thêm tệp. Cảm ơn bạn đã trả lời toàn diện
Pedro Martins Timóteo da Costa

19

Đơn giản. Ví dụ...

Mở cửa sổ Windows PowerShell và gõ:

notepad $profile

Sau đó tạo một hàm, chẳng hạn như:

function goSomewhereThenOpenGoogleThenDeleteSomething {
    cd C:\Users\
    Start-Process -FilePath "http://www.google.com"
    rm fileName.txt
}

Sau đó nhập tên này dưới tên hàm:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Bây giờ bạn có thể nhập từ "google" vào Windows PowerShell và để nó thực thi mã trong chức năng của bạn!


$ profile dường như không phải là một biến môi trường mặc định trong windows 10. Nó được cho là gì?
wordsforthewise

@wordsforthewise - Biến tự động $ PROFILE lưu trữ các đường dẫn đến cấu hình PowerShell có sẵn trong phiên hiện tại. Nó được bao gồm trong Windows PowerShell.
Sterling Bourne

1
Đây không phải là giải pháp đơn giản nhất được cung cấp.
Phill

Tôi đã phải bật 'Kích hoạt tập lệnh PowerShell' (trong câu trả lời khác) để làm việc này. Nghiêm túc siêu đơn giản!
Rocky Kev

10

Chỉ cần thêm vào danh sách các địa điểm có thể ...

Điều này đã không làm việc cho tôi: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Tuy nhiên, điều này đã làm: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Nếu bạn không có hồ sơ hoặc bạn đang muốn thiết lập một hồ sơ, hãy chạy lệnh sau, nó sẽ tạo thư mục / tệp cần thiết và thậm chí cho bạn biết nơi nó sống! New-Item -path $profile -type file -force


5

để tạo tệp profile1.psl, hãy nhập lệnh sau:

mục mới $ PROFILE.C Hiện tạiUser Allhosts Tập tin -ItemType -Force

để truy cập tệp, gõ lệnh tiếp theo:

ise $ PROFILE. Hiện tạiUser ALLhosts

lưu ý nếu bạn chưa làm điều này trước đây, bạn sẽ thấy rằng bạn sẽ không thể chạy tập lệnh do chính sách thực thi của bạn, mà bạn cần thay đổi thành Không bị hạn chế từ Hạn chế (mặc định).

Để làm điều đó, đóng tập lệnh và sau đó gõ lệnh này:

Set-ExecutPolicy -Scope CurrentUser

sau đó:

RemoteSign

sau đó lệnh này lại:

ise $ PROFILE. Hiện tạiUser ALLhosts

sau đó cuối cùng nhập các bí danh của bạn trong tập lệnh, lưu nó và chúng sẽ chạy mỗi khi bạn chạy powershell, ngay cả sau khi khởi động lại máy tính của bạn.


3
Bạn có thể muốn : Set-ExecutionPolicy RemoteSigned. Đừng đi giới thiệu Unrestricted. Nguồn: itprotoday.com/manloyment-mobility/ từ
PhilT

2

Điều này hơi lạ mắt một chút ... nhưng nó hoạt động:

Bước 1: Tạo một hồ sơ Powershell:

FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
#   AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE

$ErrorActionPreference = "Stop"

function print ([string]$msg)
{
    Write-Host -ForegroundColor Green $msg
}

print ""

# User's Powershell Profile
$psdir  = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"

print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null

# this is your auto-generated powershell profile to be installed
$content = @(
    "",
    ". ~/Documents/tools/profile.ps1",
    ""
)

print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)

print ""

# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted

Bước 2: sau đó trong công cụ ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Bước 3:

$ Set-ExecutPolicy -Scope CurrentUser Không bị giới hạn $. ./install_profile.ps1

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.