Cara membuat Alias ​​PowerShell permanen

157

Saya ingin membuat aliasdari a cmdletyang tidak kedaluwarsa setelah saya menutup sesi Powershell saat ini, katakanlah saya memiliki alias ini:

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

Ini membuat Gotoalias dengan sempurna , tetapi saya ingin menggunakannya bahkan setelah saya menutup sesi saat ini, bagaimana saya bisa mencapainya.

catatan:

Sistem Bantuan PowerShell menyarankan agar saya dapat mengekspor alias yang saya buat, dan mengimpornya saat saya membuka sesi baru, sebenarnya bukan itu yang saya cari, karena, apakah ada cara langsung yang jelas untuk tetap memiliki alias setelah saya buat melalui sesi yang berbeda

AymenDaoudi
sumber
IMO Anda jauh lebih baik meletakkan skrip ke dalam PATH. Dengan begitu, perintah akan langsung tersedia untuk semua shell terbuka Anda dan jika Anda mengubahnya, perubahan akan menyebar ke semua penggunaan berikutnya tanpa harus memuat ulang $ profile atau semacamnya.
masterxilo

Jawaban:

121

DIPERBARUI - Jan 2017

Dimungkinkan untuk menyimpan dalam profile.ps1file kode apa pun PowerShell yang akan dijalankan setiap kali PowerShell dimulai. Setidaknya ada 6 jalur berbeda tempat menyimpan kode bergantung pada pengguna mana yang harus menjalankannya. Kami hanya dapat mempertimbangkan 2 di antaranya: jalur "semua pengguna" dan "hanya pengguna Anda".

Jadi untuk menjawab pertanyaan Anda, Anda hanya perlu membuat profile.ps1file yang berisi kode yang ingin Anda jalankan, yaitu

New-Alias Goto Set-Location

dan simpan di jalur yang benar:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): hanya pengguna Anda yang akan menjalankan kode.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): setiap pengguna akan mengeksekusi kode.

Untuk menerapkan perubahan, tutup semua instance PowerShell yang terbuka dan mulai ulang.

TIPS

  • Jika kedua jalur berisi profile.ps1file, semua pengguna akan dieksekusi terlebih dahulu, lalu spesifik pengguna.

  • Selalu letakkan kode di profil khusus pengguna jika tidak perlu memperpanjang eksekusinya untuk setiap pengguna. Anda tidak memerlukan hak administrator untuk menambahkan file ke ruang pengguna Anda (jika tidak, Anda melakukannya) dan Anda tidak mencemari ruang pengguna lain.

  • INGAT! The $PsHomejalur yang berbeda antara 32bit dan 64bit contoh PowerShell, sehingga Anda harus mempertimbangkan baik lingkungan jika Anda ingin selalu mengeksekusi kode profil. Biasanya jalur C:\Windows\System32\WindowsPowerShell\v1.0untuk lingkungan 64bit dan C:\Windows\SysWow64\WindowsPowerShell\v1.0untuk yang 32bit.

Naigel
sumber
12
tidak ada kesalahan itu tidak berfungsi, saya tidak yakin apakah ini adalah masalah izin. Saya benar-benar membuatnya berfungsi (saya haruskah saya berkomentar sebelumnya). Saya harus membuat folder \Users\{ME}\Documents\WindowsPowerShelldan kemudian menambahkan Microsoft.PowerShell_profile.ps1non dari jalur lain yang berfungsi untuk saya.
2
Menurut artikel terkait, penggunaan "$HOME\Documents\WindowsPowerShell"dan penamaan Microsoft.PowerShell_profile.ps1membatasi cakupan ke non-ISE dan ke host saat ini, tetapi tidak boleh menjadi masalah izin (sama "$Home\Documents\profile.ps1" should apply). Mungkin tidak begitu, saya akan mencobanya, terima kasih atas informasinya
Naigel
2
Hai @ Naigel, saya harus menggunakan pendekatan ini untuk membuatnya berfungsi: superuser.com/questions/516700/… jadi solusi terakhir bagi saya adalah membuat file untuk profil: New-Item -path $profile -type file -forceyang membuat folder dan fileDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle
64
Cara terbaik untuk mendapatkan lokasi profil adalah dengan menjalankan "echo $ profile" di jendela PowerShell Anda.
Rahul Jha
3
Ingatlah untuk membuat cadangan file profile.ps1 Anda, karena Pembaruan Pembuat Windows tampaknya menghapus file di lokasi defaultnya !!
gooleem
118

Bukan ide yang baik untuk menambahkan hal semacam ini langsung ke $env:WINDIRfolder PowerShell Anda .
Cara yang disarankan adalah menambahkannya ke profil pribadi Anda:

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

Sekarang tambahkan alias Anda ke file Microsoft.PowerShell_profile.ps1 yang sekarang dibuka:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Kemudian simpan, dan segarkan sesi saat ini dengan:

. $profile

Catatan: Untuk berjaga-jaga, jika Anda mendapatkan masalah izin seperti

CategoryInfo: SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId: UnauthorizedAccess

Coba perintah di bawah ini dan segarkan sesi lagi.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Kejar Florell
sumber
1
Komentar yang bagus. Sangat jelas, meskipun PowerShell saya tidak memiliki sentuhan.
JustinB
9
Untuk memungkinkan eksekusi skrip profil saya, saya harus melakukan satu langkah tambahan. Jalankan Powershell sebagai Administrator, dan jalankan Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. The -Scopepilihan membuatnya sedikit lebih aman.
zombat
2
Ini adalah metode yang bagus! Harap diperhatikan bahwa fungsi itu sendiri juga tersedia di shell, jadi Anda tidak terlalu membutuhkan bagian Set-Alias. Panggil saja fungsinya MyAlias. Juga, untuk menyampaikan argumen, gunakan @Args, misalnyafunction gs { git status @Args }
Automatico
3
@Automatico Saya suka eksplisit tentang Set-Aliaskarena saya suka menamai metode saya menggunakan konvensi PS yang sesuai dengan Kata Kerja yang sesuai. Tapi ya, jika Anda tidak pilih-pilih, Anda bisa memberi nama metode Anda apa pun yang ingin Anda panggil.
Mengejar Florell
1
@zombat Inilah tepatnya yang saya perjuangkan, selama berjam-jam. Terima kasih, saya sudah selesai sekarang.
jawad mansoor
32

2018, Windows 10

Anda dapat menautkan ke file atau direktori apa pun dengan bantuan skrip PowerShell sederhana.

Menulis script shortcut file

Buka Windows PowerShell ISE. Di panel skrip tulis:

New-Alias ${shortcutName} ${fullFileLocation}

Kemudian menuju ke panel baris perintah. Temukan alamat profil pengguna PowerShell Anda dengan echo $profile. Simpan skrip di alamat ini.

masukkan deskripsi gambar di sini

Skrip di alamat profil PowerShell akan berjalan setiap kali Anda membuka PowerShell. Pintasan harus berfungsi dengan setiap jendela PowerShell baru.

Menulis script shortcut direktori

Ini membutuhkan baris lain dalam skrip kami.

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

Selebihnya persis sama.

masukkan deskripsi gambar di sini

Aktifkan PowerShell Scripts

Secara default, skrip PowerShell diblokir. Untuk mengaktifkannya, buka pengaturan -> Perbarui & Keamanan -> Untuk pengembang. Pilih Mode Pengembang (mungkin perlu dimulai ulang). Memilih Mode Pengembang Windows 10.

Gulir ke bawah ke bagian PowerShell, centang opsi "Ubah kebijakan eksekusi ...", dan terapkan.

Mengaktifkan skrip PowerShell

Ben Carp
sumber
2
echo $profileadalah tip yang bagus untuk membantu menemukan lokasi yang benar untuk menambahkan file. Terima kasih atas jawaban
lengkapnya
26

Buka jendela Windows PowerShell dan ketik:

notepad $profile

Kemudian buat fungsi, seperti:

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

Kemudian ketikkan ini di bawah nama fungsi:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Sekarang Anda dapat mengetik kata "google" ke dalam Windows PowerShell dan menjalankan kode di dalam fungsi Anda!

Sterling Bourne
sumber
$ profile tampaknya bukan variabel lingkungan default di windows 10. Apa yang seharusnya ditunjukkannya?
demikian juga
@wordsforthewise - Variabel otomatis $ PROFILE menyimpan jalur ke profil PowerShell yang tersedia di sesi saat ini. Ini termasuk dalam Windows PowerShell.
Sterling Bourne
2
Ini adalah solusi paling sederhana yang disediakan.
Phill
Saya harus mengaktifkan 'Enable PowerShell Scripts' (dalam jawaban lain) agar ini berfungsi. Benar-benar sangat sederhana!
Rocky Kev
Solusi hebat, perlu dicatat bahwa file di bawah $ profile mungkin belum ada. Bisa dibuat secara manual.
yooloobooy
10

Hanya untuk menambahkan ke daftar kemungkinan lokasi ini ...

Ini tidak berhasil untuk saya: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Namun demikian: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Jika Anda tidak memiliki profil atau Anda ingin membuatnya, jalankan perintah berikut, ini akan membuat folder / file yang diperlukan dan bahkan memberi tahu Anda di mana ia berada! New-Item -path $profile -type file -force

golden_grahams
sumber
5

untuk membuat file profile1.psl, ketik perintah berikut:

item baru $ PROFILE.CurrentUserAllHosts -ItemType file -Force

untuk mengakses file, ketik perintah selanjutnya:

ise $ PROFILE.CurrentUserAllHosts

Catatan jika Anda belum pernah melakukan ini sebelumnya, Anda akan melihat bahwa Anda tidak akan dapat menjalankan skrip karena kebijakan eksekusi Anda, yang perlu Anda ubah menjadi Tidak Dibatasi dari Dibatasi (default).

untuk melakukannya tutup skrip dan kemudian ketik perintah ini:

Set-ExecutionPolicy -Scope CurrentUser

kemudian:

RemoteSigned

lalu perintah ini lagi:

ise $ PROFILE.CurrentUserAllHosts

lalu ketikkan alias Anda di skrip, simpan, dan alias harus dijalankan setiap kali Anda menjalankan PowerShell, bahkan setelah komputer Anda restart.

Michael Sanders
sumber
3
Anda mungkin ingin: Set-ExecutionPolicy RemoteSigned. Jangan merekomendasikan Unrestricted. Sumber: itprotoday.com/management-mobility/…
PhilT
2

Ini sedikit mewah ... tetapi berhasil:

Langkah 1: Buat Profil 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

Langkah 2: lalu di tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Langkah 3:

$ Set-ExecutionPolicy -Scope CurrentUser Tidak Terbatas $. ./install_profile.ps1

Bill Moore
sumber