วิธีสร้างนามแฝง PowerShell แบบถาวร


157

ฉันต้องการสร้างaliasสิ่งcmdletที่ไม่หมดอายุหลังจากฉันปิดเซสชันปัจจุบันของ Powershell สมมติว่าฉันมีนามแฝงนี้:

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

สิ่งนี้สร้างGotoนามแฝงได้อย่างสมบูรณ์แบบแต่ฉันต้องการใช้แม้ว่าฉันจะปิดเซสชันปัจจุบันไปแล้วฉันจะบรรลุเป้าหมายนั้นได้อย่างไร

บันทึก:

ระบบวิธีใช้ PowerShell แนะนำว่าฉันสามารถส่งออกนามแฝงที่ฉันสร้างและนำเข้าได้ในครั้งต่อไปที่ฉันเปิดเซสชันใหม่จริง ๆ แล้วนั่นไม่ใช่สิ่งที่ฉันกำลังมองหามีวิธีที่ชัดเจนโดยตรงในการมีนามแฝงต่อไป สร้างผ่านเซสชันต่างๆ


IMO คุณดีกว่ามากในการวางสคริปต์ลงใน PATH ด้วยวิธีนี้คำสั่งจะพร้อมใช้งานทันทีสำหรับเชลล์ที่เปิดอยู่ทั้งหมดของคุณและหากคุณเปลี่ยนคำสั่งการเปลี่ยนแปลงจะเผยแพร่ไปยังการใช้งานในภายหลังทั้งหมดโดยไม่ต้องโหลดโปรไฟล์ $ หรืออะไรบางอย่างซ้ำ
masterxilo

คำตอบ:


121

ปรับปรุง - ม.ค. 2560

เป็นไปได้ที่จะจัดเก็บprofile.ps1โค้ด powershell ไว้ในไฟล์เพื่อเรียกใช้งานทุกครั้งที่ powershell เริ่มทำงาน มีเส้นทางที่แตกต่างกันอย่างน้อย6 เส้นทางในการจัดเก็บรหัสขึ้นอยู่กับว่าผู้ใช้รายใดต้องดำเนินการ เราพิจารณาได้เพียง 2 รายการเท่านั้นคือเส้นทาง "ผู้ใช้ทั้งหมด" และ "เฉพาะผู้ใช้ของคุณ"

ดังนั้นในการตอบคำถามของคุณคุณจะต้องสร้างprofile.ps1ไฟล์ที่มีรหัสที่คุณต้องการเรียกใช้นั่นคือ

New-Alias Goto Set-Location

และบันทึกไว้ในเส้นทางที่เหมาะสม:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): มีเพียงผู้ใช้ของคุณเท่านั้นที่จะรันโค้ด
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): ผู้ใช้ทุกคนจะรันโค้ด

หากต้องการใช้การเปลี่ยนแปลงให้ปิดอินสแตนซ์พาวเวอร์เชลล์ที่เปิดอยู่ทั้งหมดแล้วรีสตาร์ท

เคล็ดลับ

  • หากทั้งสองพา ธ มีprofile.ps1ไฟล์ผู้ใช้ทั้งหมดจะถูกเรียกใช้งานก่อนจากนั้นจึงเจาะจงผู้ใช้

  • ใส่รหัสในโปรไฟล์เฉพาะผู้ใช้เสมอหากไม่จำเป็นต้องขยายการดำเนินการไปยังผู้ใช้แต่ละราย คุณไม่จำเป็นต้องมีสิทธิ์ของผู้ดูแลระบบในการเพิ่มไฟล์ลงในพื้นที่ผู้ใช้ของคุณ (ไม่เช่นนั้นคุณก็ทำ) และคุณไม่ทำให้พื้นที่ของผู้ใช้คนอื่นเป็นมลพิษ

  • จำไว้! $PsHomeเส้นทางที่แตกต่างกันระหว่าง 32bit และ 64bit กรณีของ PowerShell ดังนั้นคุณต้องพิจารณาสภาพแวดล้อมทั้งถ้าคุณต้องการเสมอที่จะรันโค้ดรายละเอียด โดยปกติเส้นทางนี้ใช้C:\Windows\System32\WindowsPowerShell\v1.0สำหรับสภาพแวดล้อม 64 บิตและC:\Windows\SysWow64\WindowsPowerShell\v1.0สำหรับ 32 บิต


12
ไม่มีข้อผิดพลาดมันใช้งานไม่ได้ฉันไม่แน่ใจว่านี่เป็นปัญหาการอนุญาตหรือไม่ ฉันทำงานได้จริง (ฉันควรแสดงความคิดเห็นก่อนหน้านี้) ฉันต้องสร้างโฟลเดอร์\Users\{ME}\Documents\WindowsPowerShellแล้วเพิ่มMicrosoft.PowerShell_profile.ps1เส้นทางอื่นที่ไม่เหมาะกับฉัน

2
ตามบทความที่เชื่อมโยงโดยใช้"$HOME\Documents\WindowsPowerShell"และการตั้งชื่อMicrosoft.PowerShell_profile.ps1จำกัด ขอบเขตไว้ที่ไม่ใช่ ISE และโฮสต์ปัจจุบัน แต่ไม่ควรเป็นเรื่องของสิทธิ์ (เหมือนกัน"$Home\Documents\profile.ps1" should apply) อาจจะไม่เป็นเช่นนั้นจริงๆฉันจะลองดูขอบคุณสำหรับข้อมูล
Naigel

2
สวัสดี @Naigel ฉันต้องใช้วิธีนี้เพื่อให้มันใช้งานได้: superuser.com/questions/516700/…ดังนั้นทางออกสุดท้ายสำหรับฉันคือสร้างไฟล์สำหรับโปรไฟล์: New-Item -path $profile -type file -forceที่สร้างโฟลเดอร์และไฟล์Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

64
วิธีที่ดีที่สุดในการรับตำแหน่งโปรไฟล์คือการเรียกใช้ "echo $ profile" ในหน้าต่าง powershell ของคุณ
Rahul Jha

3
อย่าลืมสำรองไฟล์ profile.ps1 ของคุณเนื่องจาก Windows Creators Update ดูเหมือนจะล้างไฟล์ในตำแหน่งเริ่มต้น !!
gooleem

118

ไม่ใช่ความคิดที่ดีที่จะเพิ่มสิ่งนี้ลงใน$env:WINDIRโฟลเดอร์ powershell ของคุณโดยตรง
วิธีที่แนะนำคือเพิ่มลงในโปรไฟล์ส่วนตัวของคุณ:

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

ตอนนี้เพิ่มนามแฝงของคุณในไฟล์ Microsoft.PowerShell_profile.ps1 ที่เปิดอยู่:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

จากนั้นบันทึกและรีเฟรชเซสชันปัจจุบันด้วย:

. $profile

หมายเหตุ: ในกรณีที่คุณได้รับอนุญาตเช่น

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

ลองใช้คำสั่งด้านล่างและรีเฟรชเซสชันอีกครั้ง

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
แสดงความคิดเห็นได้ดีเยี่ยม ชัดเจนมากแม้ว่า powershell ของฉันจะไม่มีการสัมผัส
JustinB

9
เพื่อให้สามารถเรียกใช้สคริปต์โปรไฟล์ของฉันได้ฉันต้องทำขั้นตอนเพิ่มเติมอีกขั้นตอนหนึ่ง เรียก PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUserในฐานะผู้ดูแลและดำเนินการ -Scopeตัวเลือกที่จะทำให้มันมีความปลอดภัยมากขึ้นอีกนิด
zombat

2
นี่เป็นวิธีการที่ยอดเยี่ยม! โปรดทราบว่าฟังก์ชันนั้นมีอยู่ในเชลล์ด้วยดังนั้นคุณจึงไม่จำเป็นต้องใช้ส่วน Set-Alias MyAliasเพียงแค่เรียกใช้ฟังก์ชัน นอกจากนี้หากต้องการส่งต่อข้อโต้แย้งให้ใช้@Argsเช่นfunction gs { git status @Args }
Automatico

3
@ อัตโนมัติฉันชอบที่จะพูดอย่างชัดเจนเกี่ยวกับSet-Aliasเพราะฉันชอบตั้งชื่อวิธีการของฉันโดยใช้รูปแบบ PS ที่เหมาะสมกับคำกริยาที่เหมาะสม แต่ใช่ถ้าคุณไม่จู้จี้จุกจิกคุณสามารถตั้งชื่อวิธีการของคุณตามที่คุณต้องการจะเรียก
Chase Florell

1
@zombat นี่คือสิ่งที่ฉันกำลังดิ้นรนเป็นเวลาหลายชั่วโมง ขอบคุณตอนนี้ฉันทำเสร็จแล้ว
jawad mansoor

32

2018, Windows 10

คุณสามารถลิงก์ไปยังไฟล์หรือไดเร็กทอรีใดก็ได้โดยใช้สคริปต์ PowerShell แบบธรรมดา

การเขียนสคริปต์ทางลัดของไฟล์

เปิด Windows PowerShell ISE ในบานหน้าต่างสคริปต์เขียน:

New-Alias ${shortcutName} ${fullFileLocation}

จากนั้นไปที่บานหน้าต่างบรรทัดคำสั่ง ค้นหาที่อยู่โปรไฟล์ผู้ใช้ PowerShell ของคุณด้วยecho $profile. บันทึกสคริปต์ในที่อยู่นี้

ป้อนคำอธิบายภาพที่นี่

สคริปต์ในที่อยู่โปรไฟล์ของ PowerShell จะทำงานทุกครั้งที่คุณเปิด powershell ทางลัดควรใช้ได้กับทุกหน้าต่าง PowerShell ใหม่

การเขียนสคริปต์ทางลัดไดเร็กทอรี

มันต้องมีบรรทัดอื่นในสคริปต์ของเรา

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

ส่วนที่เหลือเหมือนกันเป๊ะ

ป้อนคำอธิบายภาพที่นี่

เปิดใช้งานสคริปต์ PowerShell

โดยค่าเริ่มต้นสคริปต์ PowerShell จะถูกบล็อก หากต้องการเปิดใช้งานให้เปิดการตั้งค่า -> อัปเดตและความปลอดภัย -> สำหรับนักพัฒนา เลือกโหมดนักพัฒนา (อาจต้องรีสตาร์ท) การเลือกโหมดนักพัฒนา Windows 10.

เลื่อนลงไปที่ส่วน PowerShell เลือกตัวเลือก "เปลี่ยนนโยบายการดำเนินการ ... " แล้วนำไปใช้

การเปิดใช้งานสคริปต์ PowerShell


2
echo $profileเป็นเคล็ดลับที่ยอดเยี่ยมในการช่วยค้นหาตำแหน่งที่ถูกต้องเพื่อเพิ่มไฟล์ ขอบคุณสำหรับคำตอบที่ครอบคลุม
Pedro Martins Timóteo da Costa

26

เปิดหน้าต่าง Windows PowerShell แล้วพิมพ์:

notepad $profile

จากนั้นสร้างฟังก์ชันเช่น:

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

จากนั้นพิมพ์ภายใต้ชื่อฟังก์ชัน:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

ตอนนี้คุณสามารถพิมพ์คำว่า "google" ลงใน Windows PowerShell และเรียกใช้โค้ดภายในฟังก์ชันของคุณได้แล้ว!


$ profile ดูเหมือนจะไม่ใช่ตัวแปรสภาพแวดล้อมเริ่มต้นใน windows 10 มันควรจะชี้ไปที่อะไร?
พูด

@wordsforthewise - ตัวแปรอัตโนมัติ $ PROFILE เก็บเส้นทางไปยังโปรไฟล์ PowerShell ที่พร้อมใช้งานในเซสชันปัจจุบัน รวมอยู่ใน Windows PowerShell
Sterling Bourne

2
นี่คือแถบไม่มีวิธีแก้ปัญหาที่ง่ายที่สุด
Phill

ฉันต้องเปิดใช้งาน 'เปิดใช้งานสคริปต์ PowerShell' (ในคำตอบอื่น) เพื่อให้สิ่งนี้ใช้งานได้ ง่ายสุด ๆ อย่างจริงจัง!
Rocky Kev

วิธีแก้ปัญหาที่ยอดเยี่ยมที่น่าสังเกตว่าอาจยังไม่มีไฟล์ภายใต้ $ profile สามารถสร้างได้ด้วยตนเองแม้ว่า
yooloobooy

10

เพียงเพื่อเพิ่มในรายการตำแหน่งที่เป็นไปได้นี้ ...

สิ่งนี้ไม่ได้ผลสำหรับฉัน: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

อย่างไรก็ตามสิ่งนี้ทำ: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

หากคุณไม่มีโปรไฟล์หรือต้องการตั้งค่าให้เรียกใช้คำสั่งต่อไปนี้มันจะสร้างโฟลเดอร์ / ไฟล์ที่จำเป็นและยังบอกคุณได้ว่ามันอยู่ที่ไหน! New-Item -path $profile -type file -force


5

ในการสร้างไฟล์ profile1.psl ให้พิมพ์คำสั่งต่อไปนี้:

ใหม่รายการ $ PROFILE.CurrentUserAllHosts - ไฟล์ ItemType -Force

เพื่อเข้าถึงไฟล์พิมพ์คำสั่งถัดไป:

คือ $ PROFILE.CurrentUserAllHosts

บันทึกว่าหากคุณไม่เคยทำมาก่อนคุณจะเห็นว่าคุณจะไม่สามารถเรียกใช้สคริปต์ได้เนื่องจากนโยบายการดำเนินการของคุณซึ่งคุณต้องเปลี่ยนเป็นไม่ จำกัด จากที่ จำกัด (ค่าเริ่มต้น)

เพื่อปิดสคริปต์จากนั้นพิมพ์คำสั่งนี้:

Set-ExecutionPolicy -Scope CurrentUser

แล้ว:

RemoteSigned

จากนั้นคำสั่งนี้อีกครั้ง:

คือ $ PROFILE.CurrentUserAllHosts

จากนั้นพิมพ์นามแฝงของคุณในสคริปต์บันทึกและควรเรียกใช้ทุกครั้งที่คุณเรียกใช้ powershell แม้ว่าจะรีสตาร์ทคอมพิวเตอร์แล้วก็ตาม


3
คุณอาจต้องการ: Set-ExecutionPolicy RemoteSigned. อย่าไปแนะนำUnrestricted. ที่มา: itprotoday.com/management-mobility/…
PhilT

2

นี่เป็นเพียงเล็กน้อยแฟนซี ... แต่ใช้งานได้:

ขั้นตอนที่ 1:สร้างโปรไฟล์ 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

ขั้นตอนที่ 2:จากนั้นใน tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

ขั้นตอนที่ 3:

$ Set-ExecutionPolicy -Scope CurrentUser ไม่ จำกัด $. ./install_profile.ps1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.