2016-09-01 5 views
0

So habe ich den ganzen Tag mit Powershell gekämpft. Ich versuche etwas zu machen, wie ich es hier niedergelegt habe. Ich deklariere eine Variable am Anfang des Skripts, dann erkläre ich 2 Funktionen. Eine Funktion setzt einen Wert auf die Variable, und die andere erhält die Variable.Powershell Zuweisen und Abrufen von Variablen

Wenn ich die Variable bekomme, bekomme ich nichts - es ist leer.

Hat jemand eine Ahnung, was ich falsch mache (ich bin etwas wenig und dumm zu erraten)

$ImUsedInMultplePlaces = "" 

Function LetsChooseSomething 
{ 
    Write-Host "1: something" 
    Write-Host "2: Something else" 
    $answer = Read-Host "Pick One" 

    switch($answer) 
    { 
     "1" { $ImUsedInMultiplePlaces = "We chose something!"; Write-Host "I put it in there!" } 
     "2" { $ImUsedInMultiplePlaces = "We chose something else!"; Write-Host "I put it in there!" } 
    } 
} 

Function ShowMeMyChoice 
{ 
    Write-Host $ImUsedInMultiplePlaces 
} 

Write-Host "Welcome to this amazing script, im about to make you choose" 
Write-Host "" 
LetsChooseSomething 

Write-Host "" 
Write-Host "Great Choice!" 
Write-Host "" 

ShowMeMyChoice 
+1

Lesen Sie über Scoping: [Variable Bereich in PowerShell] (http://StackOverflow.com/q/93255 69) und [die offiziellen Dokumente] (https://technet.microsoft.com/en-us/library/hh847849.aspx) – wOxxOm

Antwort

1

Es ist eine Frage von scope. Ersetzen Sie diese und versuchen Sie es.

"1" { $global:ImUsedInMultiplePlaces = "We chose something!"; Write-Host "I put it in there!" } 
    "2" { $global:ImUsedInMultiplePlaces = "We chose something else!"; Write-Host "I put it in there!" } 
+0

Ich wusste, es war etwas einfaches .. Vielen Dank! Ich habe viel Zeit mit diesem hier verbracht (ja, es hat jetzt funktioniert) – Kage

1

Die Verwendung von globalen Variablen macht Software schwerer zu lesen und zu verstehen. Da jeder Code irgendwo im Programm den Wert der Variablen jederzeit ändern kann, kann das Verstehen der Verwendung der Variablen das Verständnis eines großen Teils des Programms beinhalten. Globale Variablen erschweren die Trennung von Code in wiederverwendbare Bibliotheken. Sie können zu Benennungsproblemen führen, da eine globale Variable, die in einer Datei definiert ist, mit demselben Namen in Konflikt geraten kann, der für eine globale Variable in einer anderen Datei verwendet wird (wodurch die Verknüpfung fehlschlägt). Eine lokale Variable mit demselben Namen kann die globale Variable vor dem Zugriff schützen, was wiederum zu einem schwer verständlichen Code führt. Die Einstellung einer globalen Variablen kann zu Nebenwirkungen führen, die schwer zu lokalisieren und vorherzusagen sind. Die Verwendung globaler Variablen erschwert die Isolierung von Code-Einheiten für Unit-Tests. somit können sie direkt zur Senkung der Codequalität beitragen.

Ich habe die Funktionen leicht umbenannt (und modifiziert), um mehr Klarheit zu erreichen.

Die erste Funktion gibt einen String:

function Select-Something 
{ 
    Write-Host "1: Something" 
    Write-Host "2: Something else" 
    $answer = Read-Host -Prompt "Pick One" 

    switch($answer) 
    { 
     "1" { [string]$output = "We chose something!"  ; Write-Host "I put it in there!" } 
     "2" { [string]$output = "We chose something else!"; Write-Host "I put it in there!" } 
    } 

    return $output 
} 

ein ([string]) Parameter an die zweite Funktion sie in der Lage Durch das Hinzufügen ist eine beliebige Zeichenfolge zu akzeptieren:

function Show-Selection ([string]$Selection) 
{ 
    Write-Host $Selection 
} 

Wie Sie sehen können , macht es den Code einfacher zu lesen:

Write-Host "Welcome to this amazing script, I'm about to make you choose." 
Write-Host "" 

$choice = Select-Something 

Write-Host "" 
Write-Host "Great Choice!" 
Write-Host "" 

Show-Selection $choice 
Verwandte Themen