Kaip tvarkyti komandinės eilutės argumentus programoje "PowerShell
Koks yra geriausias būdas tvarkyti komandinės eilutės argumentus?
Atrodo, kad yra keletas atsakymų, koks yra geriausias būdas, ir dėl to aš esu įstrigęs, kaip tvarkyti tokį paprastą dalyką kaip:
script.ps1 /n name /d domain
IR
script.ps1 /d domain /n name.
Ar yra koks nors įskiepis, kuris galėtų geriau tai tvarkyti? Žinau, kad čia išradinėju dviratį.
Akivaizdu, kad tai, ką aš jau turiu, nėra gražu ir tikrai nėra geriausia, bet tai veikia.. ir tai yra bjauru.
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
459
1
Išradinėjate dviratį iš naujo. Įprastuose "PowerShell" scenarijuose parametrai prasideda
-
, pavyzdžiui,script.ps1 -server http://devserver
.Tada juos tvarkote
param
skirsnyje failo pradžioje.Paramams taip pat galite priskirti numatytąsias reikšmes, perskaityti jas iš konsolės, jei jų nėra, arba sustabdyti scenarijaus vykdymą:
Skripto viduje galite tiesiog
nes visi parametrai tampa kintamaisiais, prieinamais scenarijaus srityje.
Šiame pavyzdyje
$server
įgyja numatytąją reikšmę, jei scenarijus iškviečiamas be jo, scenarijus sustoja, jei praleidžiamas parametras-username
, ir prašo terminalo įvesties, jei praleidžiamas-password
.Atnaujinti: Taip pat galite perduoti "vėliavą" (loginį true/false parametrą) "PowerShell" scenarijui. Pavyzdžiui, jūsų scenarijus gali priimti "force", kai scenarijus veikia atsargesniu režimu, kai force nenaudojamas.
Tam naudojamas raktažodis
[switch]
parametro tipas:Tada scenarijaus viduje su juo dirbsite taip:
Skambindami scenarijui, nustatysite jungiklio/žymos parametrą taip:
Jei norite aiškiai nurodyti, kad vėliavėlė nenustatyta, tam yra speciali sintaksė
Nuorodos į atitinkamą "Microsoft" dokumentaciją (skirta "PowerShell 5.0"; nuorodose taip pat pateikiamos 3.0 ir 4.0 versijos):