2017-01-27 2 views
1

Ich versuche, einen dynamischen Skriptblock zu erstellen, damit ich Variablen im Skriptblock verwenden kann.Seltsames Problem mit Skriptblock in Powershell ISE: Einfügen der Zeichenfolgendarstellung in Notepad zeigt unerwartetes Zeichen

Dies ist mein Code:

$Servers = "server1", "server2" 

$Command = "c:\plink -t [email protected]" + $Servers[0] + " -pw 'password'" 
$Command = [Scriptblock]::Create($Command) 

$Command2 = {c:\plink -t [email protected] -pw 'password'} 

$command 
$command2 

das Skripts in der Powershell ISE Laufen produziert, was ich erwarten würde:

c:\plink -t [email protected] -pw 'password' 
c:\plink -t [email protected] -pw 'password' 

Both $ Befehl und command2 $ vorhanden identischer Ausgang, und beide sind gültige Skriptblöcke, wenn Get-Member -Verbose aktiviert ist.

Mein Problem ist, dass das Ausführen der ersten Zeile einen Verbindungsfehler erzeugt, wo die identische Ausgabe von $ command2 gut funktioniert und sich mit dem Server verbindet.

Blick in die Ausstellung, fand ich, dass das Kopieren/Einfügen der beiden erzeugten Linien im Ausgabefenster der ISE auf einen Notizblock enthüllt das Problem:

enter image description here

Wie Sie im JPG sehen können, ein ungerades Zeichen wird direkt nach dem Zeichen '@' hinzugefügt, wodurch der Befehl fehlschlägt ...

Irgendeine Idee, warum dies passiert (und wie ich es lösen kann)?!?

+0

Ich sehe, was du meinst, der hinzugefügte Zeichenwert 8 vor dem Namen server1 ... Woher zum Teufel kam das, lol! Danke für deine Hilfe: Ich hätte das nie gefunden (Da es im ISE nicht sichtbar ist! – Fredster

+0

Zeichenwert 8, das ist ein [Rückschritt] (http://www.asciitable.com/) - wie geht es dir zufällig? bekomme ich das in einer Schnur? – TessellatingHeckler

+0

Ich habe überhaupt keine Ahnung: Ich habe mit diesem seit einigen Tagen gekämpft ... Nur nach dem Einfügen fand ich den seltsamen Charakter ... – Fredster

Antwort

3

Basierend auf @ Fredster Feedback:

Es stellt sich heraus, dass ein unsichtbares Steuerzeichen in diese Zuordnungsanweisung gekrochen:

$Servers = "server1", "server2" 

von $Servers[0] mit dem String zu bauen, die später umgewandelt wurde Bei einem Skriptblock wurde dieses Steuerzeichen zu einem unsichtbaren Teil des Skriptblocks und verursachte Probleme beim Aufruf.

Um solche Probleme, Rohrwerte an das Format-Hex Cmdlets (pSV5 +), zu diagnostizieren, die jeden Charakter zeigen, der eine Zeichenfolge, einschließlich der normalerweise unsichtbaren bildet.
Vorbehalt: Standardmäßig werden nur Zeichen im ASCII-Bereich korrekt angezeigt. Alle anderen werden einfach als Literal dargestellt. ? - Verwenden Sie den Parameter -Encoding nach Bedarf.

+2

Marked beantwortet! Vielen Dank für Ihre Hilfe! Das hatte mich schäumte Tage! – Fredster

Verwandte Themen