2017-11-05 6 views
-2

Ich versuche, eine einfache Abfrage auf Netzwerk-Computern ausführen, um ihre Windows-Version zu erhalten. Mit diesem Befehl wird und kehrt erwarteten Ergebnisse, wenn sie von der Befehlszeile verwendet:Perl Windows-Befehl schlägt fehl

psexec \\comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId 

aber, wenn sie von Perl laufen mit:

system("psexec \\\\$comp_name reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v ReleaseId") 

Ich erhalte den Fehler von REG ERROR: Invalid key name. Bedenkt man, dass die beiden Befehle sind die Gleichermaßen kann ich nicht herausfinden, warum bei der Ausführung von Perl ein Fehler auftritt. Meine einzige Annahme ist die Art, wie es die Anführungszeichen auflöst. Beachten Sie, dass dieses Problem weiterhin auftritt, unabhängig davon, ob ich system, exec oder `` verwende. Irgendwelche Vorschläge?

+0

Vielleicht ein String-Interpolationsproblem? – alex

+2

Verwenden Sie immer 'use strict; Verwende Warnungen qw (alle); '!!! Es hätte deinen Fehler identifiziert. – ikegami

Antwort

2

Sie müssen alle die Schrägstriche verdoppeln:

system("psexec \\\\$comp_name reg query 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' /v ReleaseId") 
+0

Danke, das war in der Tat das Problem. Dies und anscheinend musste es "HKLM ..." sein –

0

alle Schrägstriche Verdoppeln wird das Problem beheben, jedoch wenn einzelne externe Zitate und interne doppelten Anführungszeichen erübrigen Doppelschrägstriche hinzufügen und leichter zu lesen.

use strict; #Always use strict 
use warnings; #Always use warnings 

system('psexec \\$comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId');