2016-09-08 7 views

Antwort

0

In Powershell dies würde wie folgt aussehen: Inhalt von name.ps1:

$person = $args 
$ages = @{"Tom" = 23; 
    "Andrew" = 99; 
    "Bill" = 5} 

$age = $ages[$person] 

Write-Host "$person's age is $age" 

Und Sie würde es so alle

.\name.ps1 "tom" 

$args enthält nennen sich die Argumente, die Sie an das Skript senden. Also, wenn Sie das Skript wie folgt aufrufen: .\name.ps1 "tom" "bill", würde Ihr Ergebnis sein: tom bill's age is 23 5

+0

ist args $ spezifisch von Wert Aufnehmen. \ Name.ps1 „tom“ – Rustle

+0

'$ args' ein besonderer Wert für die Parameter ist das Skript/Funktion mit aufgerufen. Wenn Sie es wie folgt benennen: '. \ Name.ps1" tom "', '$ args' enthält' "tom" '. Wenn Sie es mit mehreren Werten aufrufen. '. \ Name.ps1" tom "" jerry "', '$ args' enthält ein Array mit' "tom" 'und' "jerry" ' –

0

Ich würde hashtable verwenden, aber wenn Sie globale Variablen haben, können Sie folgendes:

#variables 
$tom = 29 
$andrew = 99 
$bill = 5 

#your parameter 
$i = "tom" 

#echo 
Echo "$i's age is $((Get-Variable | ? {$_.Name -eq $i}).Value)" 
+0

das ist super danke – Rustle

0

Ein alternativer Ansatz zu denen unter der Voraussetzung. Mehr Code, wohl Overkill, aber ich denke, es ist gut, die PowerShell-Funktion param in den Griff zu bekommen.

# PowerShell's native argument/parameter support 
param(
    [string]$name 
) 

# Create an array with Name and Age properties as hashtable. 
$people = @(
      @{ Name = "Tom" ; Age = 29}, 
      @{ Name = "Andrew" ; Age = 99}, 
      @{ Name = "Bill" ; Age = 5} 
      ) 

# Find the person by comparing the argument to what is in your array 
$person = $people | Where-Object {$_.Name -eq $name} 

# Single name version: If the person is found, print what you would like. Otherwise let the user know name not found 
if($person -ne $null){ 
    Write-Host "$($person.Name) is $($person.Age) years old" 
}else{ 
    Write-Host "$name not found in list." 
} 

<# Multiple name version : get rid of the param section 

foreach ($name in $args){ 
    $person = $people | Where-Object {$_.Name -eq $name} 
    if($person -ne $null){ 
     Write-Host "$($person.Name) is $($person.Age) years old" 
    }else{ 
     Write-Host "$name not found in list." 
    } 
} 
#> 
Verwandte Themen