Kalıcı PowerShell Takma adları nasıl oluşturulur?


143

Geçerli Powershell oturumunu kapattıktan sonra süresi dolmayan aliasbir tane oluşturmak istiyorum cmdlet, diyelim ki bu takma adı var:

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

Bu Gototakma adı mükemmel bir şekilde oluşturur , ancak mevcut oturumu kapattıktan sonra bile kullanmak istiyorum, bunu nasıl başarabilirim.

Not:

PowerShell Yardım sistemi, oluşturduğum takma adları dışa aktarabildiğimi ve yeni bir oturum açtığımda bunları içe aktarabileceğimi gösteriyor, aslında aradığım şey bu değil, çünkü benden sonra bir takma adı tutmanın doğrudan bir yolu var farklı oturumlarla oluştur


IMO, senaryoları PATH'e koymaktan çok daha iyi. Bu şekilde, komut tüm açık kabuklarınız için anında kullanılabilir olacak ve değiştirirseniz, değişiklik $ profile veya başka bir şey yüklemeye gerek kalmadan sonraki tüm kullanımlara yayılır.
2018

Yanıtlar:


112

GÜNCEL - Ocak 2017

profile.ps1Powershell her başlatıldığında yürütülecek herhangi bir powershell kodunu bir dosyada saklamak mümkündür . Hangi kullanıcının yürütmesi gerektiğine bağlı olarak, kodun saklanacağı en az 6 farklı yol vardır . Bunlardan yalnızca 2 tanesini düşünebiliriz: "tüm kullanıcılar" ve "yalnızca kullanıcınız" yolları.

Bu nedenle, sorunuzu cevaplamak için yalnızca profile.ps1yürütülmesini istediğiniz kodu içeren bir dosya oluşturmanız gerekir;

New-Alias Goto Set-Location

ve doğru yola kaydedin:

  • "$Home\Documents" (C: \ Kullanıcılar \ adınız \ Belgeler): kodu yalnızca kullanıcı yürütür.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): her kullanıcı kodu yürütür.

Değişiklikleri uygulamak için tüm açık powershell örneklerini kapatın ve yeniden başlatın.

İPUÇLARI

  • Her iki yol da bir profile.ps1dosya içeriyorsa, önce tüm kullanıcı yürütülür, sonra kullanıcıya özgüdür.

  • Her kullanıcıya yürütmesini genişletmeye gerek yoksa, kodu her zaman kullanıcıya özel profile yerleştirin. Dosyayı kullanıcı alanınıza eklemek için yönetici haklarına ihtiyacınız yoktur (aksi halde yaparsınız) ve diğer kullanıcıların alanlarını kirletmezsiniz.

  • HATIRLAMAK! $PsHomeEğer profil kodu çalıştırmak için her zaman isterseniz hem çevreyi dikkate almak zorunda yolu powershell 32bit ve 64bit örneği arasında farklıdır. Yollar genellikle C:\Windows\System32\WindowsPowerShell\v1.064bit ortam ve C:\Windows\SysWow64\WindowsPowerShell\v1.032bit ortam içindir.


9
hiçbir hata sadece işe yaramadı, bu bir izin sorunu olup olmadığından emin değilim. Aslında işe aldın (daha önce yorum yapmalıydım). Ben klasör oluşturmak \Users\{ME}\Documents\WindowsPowerShellve daha sonra Microsoft.PowerShell_profile.ps1benim için çalışıyor diğer yollar olmayan eklemek zorunda kaldı .

2
Bağlantılı makaleye göre kullanma "$HOME\Documents\WindowsPowerShell"ve adlandırma Microsoft.PowerShell_profile.ps1kapsamı İMKB dışı ve mevcut ana bilgisayarla sınırlandırır, ancak bir izin meselesi olmamalıdır (aynı "$Home\Documents\profile.ps1" should apply). Belki gerçekten öyle değil, bir deneyeceğim, bilgi için teşekkür ederim
Naigel

2
Merhaba @Naigel, çalışmak için bu yaklaşımı kullanmalıyım: superuser.com/questions/516700/… benim için son çözüm profil için dosya oluşturmak oldu: New-Item -path $profile -type file -forceklasör ve dosya yarattıDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
Profil konumunu almanın en iyi yolu, powershell pencerenizde "echo $ profile" komutunu çalıştırmak olabilir.
Rahul Jha

2
Windows Creators Update dosyayı varsayılan konumunda temizlediğinden profile.ps1 dosyanızın bir yedeğini almayı unutmayın!
gooleem

109

Bu tür şeyleri doğrudan $env:WINDIRpowershell klasörlerinize eklemek iyi bir fikir değildir .
Önerilen yol kişisel profilinize eklemektir:

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

Şimdi takma adınızı, şimdi açılan Microsoft.PowerShell_profile.ps1 dosyasına ekleyin:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Ardından kaydedin ve geçerli oturumu aşağıdakilerle yenileyin:

. $profile

Not: Her ihtimale karşı, izin sorunu alırsanız

CategoryInfo: SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId: Yetkisiz Erişim

Aşağıdaki komutu deneyin ve oturumu tekrar yenileyin.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
Harika yorum. Çok açık olsa da, güç kabuğumun bir etkisi yok.
JustinB

9
Profil komut dosyamın yürütülmesine izin vermek için fazladan bir adım daha yapmak zorunda kaldım. Powershell'i Yönetici olarak çalıştırın ve çalıştırın Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. -ScopeSeçenek biraz daha güvenli hale getirir.
zombat

2
Bu harika bir yöntem! Lütfen işlevin kendisinin de kabukta kullanılabilir olduğunu unutmayın, bu nedenle Set-Alias ​​bölümüne gerçekten ihtiyacınız yoktur. Sadece fonksiyonu çağırınız MyAlias. Ayrıca, argümanları iletmek için @Args, örneğin kullanınfunction gs { git status @Args }
Automatico

3
@Automatico Set-AliasMetodları uygun PS kurallarını kullanarak uygun Fiillerle adlandırmayı sevdiğim için açık olmayı seviyorum. Ancak evet, seçici değilseniz, yönteminizi çağırmak istediğiniz her şeyi adlandırabilirsiniz.
Chase Florell

1
@zombat Tam da saatlerce mücadele ediyordum. Teşekkürler, şimdi bitti.
jawad mansoor

28

2018, Windows 10

Basit bir PowerShell betiği yardımıyla herhangi bir dosyaya veya dizine bağlanabilirsiniz.

Dosya kısayol komut dosyası yazma

Windows PowerShell ISE'yi açın. Komut dosyası bölmesine şunu yazın:

New-Alias ${shortcutName} ${fullFileLocation}

Sonra komut satırı bölmesine gidin. İle PowerShell kullanıcı profili adresinizi bulun echo $profile. Komut dosyasını bu adrese kaydedin.

resim açıklamasını buraya girin

PowerShell'in profil adresindeki komut dosyası, powershell'i her açışınızda çalışır. Kısayol, her yeni PowerShell penceresiyle çalışmalıdır.

Bir dizin kısayol komut dosyası yazma

Senaryomuzda başka bir satır gerektirir.

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

Gerisi tamamen aynı.

resim açıklamasını buraya girin

PowerShell Komut Dosyalarını Etkinleştir

Varsayılan olarak PowerShell komut dosyaları engellenir. Bunları etkinleştirmek için ayarları açın -> Güncelleme ve Güvenlik -> Geliştiriciler için. Geliştirici Modu'nu seçin (yeniden başlatma gerekebilir). Geliştirici Modunu Seçme Windows 10.

PowerShell bölümüne gidin, "Yürütme ilkesini değiştir ..." seçeneğini işaretleyin ve uygulayın.

PowerShell komut dosyalarını etkinleştirme


2
echo $profiledosyayı eklemek için doğru konumu bulmanıza yardımcı olacak harika bir ipucudur. Kapsamlı cevap için teşekkür ederiz
Pedro Martins Timóteo da Costa

19

Basit. Örneğin...

Bir Windows PowerShell penceresi açın ve şunu yazın:

notepad $profile

Ardından aşağıdaki gibi bir işlev oluşturun:

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

Sonra bunu fonksiyon adı altına yazın:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Artık Windows PowerShell'e "google" kelimesini yazabilir ve fonksiyonunuz içindeki kodu çalıştırmasını sağlayabilirsiniz!


$ profili Windows 10'da varsayılan bir ortam değişkeni gibi görünmüyor. Neye işaret etmesi gerekiyor?
wordsforthewise

@wordsforthewise - $ PROFILE otomatik değişkeni, geçerli oturumda bulunan PowerShell profillerinin yollarını depolar. Windows PowerShell'de bulunur.
Sterling Bourne

1
Bu bar hiçbiri sağlanan en basit çözüm oldu.
Phill

Bu işe almak için 'PowerShell Komut Dosyalarını Etkinleştir' (başka bir cevap) etkinleştirmek zorunda kaldı. Cidden süper basit!
Rocky Kev

10

Bu olası yerler listesine eklemek için ...

Bu benim için işe yaramadı: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Ancak bu: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Bir profiliniz yoksa veya bir tane ayarlamak istiyorsanız, aşağıdaki komutu çalıştırın, gerekli klasörü / dosyaları oluşturur ve hatta nerede yaşadığını söyler! New-Item -path $profile -type file -force


5

profile1.psl dosyasını oluşturmak için aşağıdaki komutu yazın:

new-item $ PROFILE.CurrentUserAllHosts -ItemType dosyası -Force

dosyaya erişmek için bir sonraki komutu yazın:

ise $ PROFILE.CurrentUserAllHosts

Not Daha önce bu yapmadıysanız, size çünkü Sınırlı (varsayılan) den Kısıtlamasız değişikliğine ihtiyaç sizin yürütme politikasının komut dosyasını çalıştırmak mümkün olmayacaktır göreceksiniz.

bunu yapmak için komut dosyasını kapatın ve ardından şu komutu yazın:

Set-ExecutionPolicy -Scope CurrentUser

sonra:

RemoteSigned

sonra bu komut tekrar:

ise $ PROFILE.CurrentUserAllHosts

Son olarak, diğer adlarınızı komut dosyasına yazın, kaydedin ve bilgisayarınızı yeniden başlattıktan sonra bile powershell'i her çalıştırışınızda çalıştırılmalıdır.


3
Muhtemelen istiyorum: Set-ExecutionPolicy RemoteSigned. Tavsiye gitmeyin Unrestricted. Kaynak: itprotoday.com/management-mobility/…
PhilT

2

Bu biraz süslü ... ama işe yarıyor:

Adım 1: Powershell Profili Oluşturma:

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

2.Adım: Sonra şu araçlarda ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Aşama 3:

$ Set-ExecutionPolicy -Scope CurrentUser Sınırsız $. ./install_profile.ps1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.