2017-12-27 4 views
2

Ich versuche ein PowerShelll-Skript zu erstellen, das zuerst eine Liste von Druckern überprüft, wenn diese bereits zugeordnet sind. Wenn ein Drucker der Liste nicht zugeordnet ist, wird der Drucker zugeordnet.Erstellen und Zugreifen auf einen Array-Wert in Powershell

Die Überprüfung auf einen Drucker allein funktioniert gut. Als ich ein Array und eine for-Schleife erstellte, funktionierte es nicht mehr, da die Druckernamen falsch waren.

Es scheint, dass ich nicht auf die einzelnen Elemente des Arrays zugreifen kann.

Dies ist meine aktuellen Code-Schnipsel:

[string[]] $printernames = "Buero Drucker","hase" 
for($i = 0; $i -lt $printernames.Length; $i++) 
{ 
    $printerexists = [Boolean](Get-WmiObject win32_printer -Filter "Name = $printernames[$i]") 
    Write-Host "Printer $printernames[$i] exists: $printerexists" 
} 

Nun, wenn $printernames[0] Aufruf, würde ich erwarten, dass die folgenden erhalten:

"Buero Drucker" 

Stattdessen erhalte ich folgendes:

"Buero Drucker hase[0]" 

Es scheint, als wäre die Variable nicht wirklich ein Array, aber ich kann nicht sagen warum.

===== ===== bearbeiten

Die for-Schleife funktioniert gut und iteriert 2 mal. Daher erwarte ich, dass die Array-Erstellung korrekt ist, aber der Zugriff auf die Variable falsch ist.

Ich habe die Variable $ i bereits überprüft. Die Konsolenausgabe ist die folgende:

Printer Buero Drucker hase[0] exists: False 
Printer Buero Drucker hase[1] exists: False 

Antwort

1

Expanding Variablen in Klammern ein bisschen ärgerlich, Sie in das gleiche Problem

$Var = "Something" 
"$Var.Property" 

versucht laufen würde es "Something.Property"

zurückkehren Sie wollen Verwenden Sie diese:

"Name = $($printernames[$i])" 

Wrap alles, was Sie brauchen, um innerhalb 012 zu erweiternund es wird wie erwartet funktionieren, derzeit Powershell nur bis zum Ende eines Var-Namen und ignoriert alle . oder [ usw.

+0

Wow vielen Dank für die schnelle Information. Haben Sie eine Quelle für diese Information? Unter google habe ich nur gefunden $ variablename [$ i] –

+0

@julianbechtold das ist nicht mit Variablen als solche zu tun, dies ist mit der Verwendung von Variablen in Strings zu tun, werfen Sie einen Blick [hier] (https: //kevinmarquette.github. io/2017-01-13-powershell-variable-substitution-in-strings /) Sie könnten einige der nützlichen Informationen finden. – ConnorLSW

+0

Nur um klar zu sein $ printernames [$ i] ist ein *** Ausdruck *** keine Variable. Also führt das $() 's aus, was manchmal calle * ausdruck quetschen * ist und bewirkt, dass der Ausdruck innerhalb der()' s ausgewertet und dann als Variable expandiert wird. – EBGreen

Verwandte Themen