ฉันพยายามเพิ่มประสิทธิภาพของ SBFและโค้ดของ Michaelเล็กน้อยเพื่อให้กะทัดรัดยิ่งขึ้น
ฉันใช้การบังคับประเภทของ PowerShell ซึ่งจะแปลงสตริงเป็นค่า enum โดยอัตโนมัติดังนั้นฉันจึงไม่ได้กำหนดพจนานุกรมการค้นหา
ฉันดึงบล็อกที่เพิ่มเส้นทางใหม่ไปยังรายการตามเงื่อนไขเพื่อให้งานเสร็จสิ้นครั้งเดียวและเก็บไว้ในตัวแปรเพื่อนำกลับมาใช้ใหม่
มันจะถูกนำไปใช้อย่างถาวรหรือเพียงแค่ไปที่เซสชั่นขึ้นอยู่กับ$PathContainer
พารามิเตอร์
เราสามารถใส่บล็อกของรหัสในฟังก์ชั่นหรือไฟล์ ps1 ที่เราเรียกโดยตรงจากพรอมต์คำสั่ง ฉันไปกับ DevEnvAddPath.ps1
param(
[Parameter(Position=0,Mandatory=$true)][String]$PathChange,
[ValidateSet('Machine', 'User', 'Session')]
[Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session',
[Parameter(Position=2,Mandatory=$false)][Boolean]$PathPrepend=$false
)
[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';
if ($PathPersisted -notcontains $PathChange) {
$PathPersisted = $(switch ($PathPrepend) { $true{,$PathChange + $PathPersisted;} default{$PathPersisted + $PathChange;} }) | Where-Object { $_ };
$ConstructedEnvPath = $PathPersisted -join ";";
}
if ($PathContainer -ne 'Session')
{
# Save permanently to Machine, User
[Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}
# Update the current session
${env:Path} = $ConstructedEnvPath;
ฉันทำสิ่งที่คล้ายกันสำหรับ DevEnvRemovePath.ps1
param(
[Parameter(Position=0,Mandatory=$true)][String]$PathChange,
[ValidateSet('Machine', 'User', 'Session')]
[Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session'
)
[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';
if ($PathPersisted -contains $PathChange) {
$PathPersisted = $PathPersisted | Where-Object { $_ -ne $PathChange };
$ConstructedEnvPath = $PathPersisted -join ";";
}
if ($PathContainer -ne 'Session')
{
# Save permanently to Machine, User
[Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}
# Update the current session
${env:Path} = $ConstructedEnvPath;
จนถึงตอนนี้พวกเขาดูเหมือนจะทำงาน