เพื่อให้ได้ไวยากรณ์ที่เทียบเท่ากับ Unix คุณไม่เพียง แต่ต้องตั้งค่าตัวแปรสภาพแวดล้อม แต่คุณต้องรีเซ็ตเป็นค่าเดิมหลังจากดำเนินการคำสั่ง ฉันทำสิ่งนี้สำเร็จแล้วสำหรับคำสั่งทั่วไปที่ฉันใช้โดยการเพิ่มฟังก์ชันที่คล้ายกับสิ่งต่อไปนี้ในโปรไฟล์ PowerShell ของฉัน
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
ดังนั้นเป็นปฏิบัติการที่ดำเนินการบางอย่างที่แตกต่างกันขึ้นอยู่กับค่าของตัวแปรสภาพแวดล้อมmycmd
app_master
ด้วยการกำหนดcmd_special
ตอนนี้ฉันสามารถดำเนินการcmd_special
จากบรรทัดคำสั่ง (รวมถึงพารามิเตอร์อื่น ๆ ) ด้วยapp_master
ชุดตัวแปรสภาพแวดล้อม ... และจะได้รับการรีเซ็ต (หรือแม้กระทั่งยกเลิกการตั้งค่า) หลังจากดำเนินการคำสั่ง
สันนิษฐานว่าคุณสามารถดำเนินการเฉพาะกิจสำหรับการร้องขอครั้งเดียวได้
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
มันควรจะง่ายกว่านี้ แต่เห็นได้ชัดว่านี่ไม่ใช่กรณีการใช้งานที่ PowerShell รองรับ บางทีเวอร์ชันในอนาคต (หรือฟังก์ชันของบุคคลที่สาม) จะอำนวยความสะดวกในการใช้งานนี้ คงจะดีถ้า PowerShell มี cmdlet ที่จะทำสิ่งนี้เช่น:
with-env app_master='http:
บางทีกูรู PowerShell สามารถแนะนำได้ว่าจะเขียน cmdlet ดังกล่าวได้อย่างไร