casi4712 0 Geschrieben 14. Februar 2020 Melden Teilen Geschrieben 14. Februar 2020 Hallo allerseits, ich versuche im cmd eine Netzwerkausgabe zu erreichen, wo jeder PC nacheinander in einer For /L Schleife ausgelesen werden und nacheinander die HOSTNAMEN geschrieben werden, also von der Sache HAnz simpel. Ausgabe: D2201 D2203 ... Wahrscheinlich macheiche es mir mit meinem Ansatz wohl zu kompliziert, auf jeden Fall kommt da nur Mist raus: Echo Off set "NET=192.168.178" FOR /L %%f IN (22, 1, 255) DO ( for %%h IN ('psexec.exe -u Admin -p hostname \\%NET%.%%f') do @set %hostname=%%h echo %NET%.%%f @ECHO %hostname% ) pause Vielleicht kennt sich ja einer aus LG chris Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 14. Februar 2020 Melden Teilen Geschrieben 14. Februar 2020 Moin, Für verschachtelte Schleifen brauchst du Delayed Expansion. Tu dir einen Gefallen und mach sowas nicht per Batch. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
casi4712 0 Geschrieben 15. Februar 2020 Autor Melden Teilen Geschrieben 15. Februar 2020 (bearbeitet) hast du denn ne andere Idee? Powershell? Früher sagte ma mir imemr mach doch ne Batch, heute kriegt ich bei jeder noch so keinen AUfgabe zu hören mach das nicht mit Btch oder nimm PS., bzw kauf dir ein überteuertes Programm, wo du nur eine simple Sache machen willst. Also, in der Hoffnung dass mir doch noch einer auf die Sprünge helfen kann, präzisiere ich noch mal Problem: Es sollen aus einer IP Rannge jeweils bestimmte Verzeichnisse kopiert werden und in einen entsprechenden Unterordner gesichert werden. Mit der reinen IP als Ordnername klappt das, aber nicht mit dem Rechnernamen, dieses scheint er als Variable nicht richtig übergeben zu bekommen, mein Ansatz sieht vereinfacht schon mal so aus. @Echo Off set "NET=192.168.178" CD /D %~dp0 FOR /L %%f in (1, 1, 255) do ( ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( for /D %%b in ("%NET%.%%f") do (@psexec -u administrator -p pass \\%NET%.%%f Hostname && @set host=%%b) ECHO %host% FOR /F %%u IN ('dir /b /a:d \\%NET%.%%f\C$\Users') DO ( ( ECHO Kopieren wir vorbereitet fuer: %NET%.%%f Benutzer %%u FOR /F "usebackq delims=" %%t IN (desktop.txt) DO ROBOCOPY "\\%NET%.%%f\c$\users\%%u\%%t" "%~dp0\set\profile\%Host%\%%u\%%t" /PURGE /B /E /R:0 /ZB ) ) ) ) || ( ECHO %NET%.%%f Host aus / Nicht erreichbar ) ) Die Variable %Host% wird ignoriert. lg und schönes Wochenende gruss chris PS: Und ja ich weiss, eine Stufe mehr an Komplexität dann Powershell ;) bearbeitet 15. Februar 2020 von casi4712 Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) Moin, Reg dich mal ab. Das Stichwort, das du für eine Batch-Lösung brauchst, habe ich dir genannt. Wenn du willst, mach es auf dem Weg, das ist lösbar. Du hast hier allerdings schon die zweite Aufgabe innerhalb weniger Tage, die mit Batch einfach unnötig kompliziert ist. Im anderen Thread habe ich dir eine Alternative genannt, bei der du nicht Powershell lernen musst. Die käme hier vielleicht auch in Frage. Bauen musst du das dann schon selbst. Damit du jetzt nicht so viel meckern musst, hier ein Beispiel für die Technik: https://www.faq-o-matic.net/2014/03/19/dateien-kopieren-und-nummerieren-per-batch/ Gruß, Nils bearbeitet 16. Februar 2020 von NilsK Ergänzung Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 Hi, was ist denn das für eine Umgebung? Gibt es ein Active Directory? Falls ja, hättest du da doch deine Hosts und musst die nicht erst umständlich suchen. Falls nein, wäre das ggfs. ein guter Anfang. Alleine schon das Passwort im Klartext ist ein No-Go, was aber gleichermaßen für die PowerShell gilt. Gruß Jan Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) Am 14.2.2020 um 19:34 schrieb casi4712: im cmd eine Netzwerkausgabe zu erreichen, Moin Ob ich heutzutage noch solch einen Weg ginge wie in der Eröffnung beschrieben? Frühen ja, heute nicht mehr. Heute liesse ich wohl vom Client aus Rechnernamen etc nach dem Herstellen der Netzwerkverbindung in eine Liste auf den Server schreiben und verarbeitete diese im zweiten Schritt erst später weiter. Eine andere Möglichkeit wäre wohl, nicht der Server schiebt die gewünschten Daten auf die Clients, sondern diese holen sich die Daten vom Server ab. Halte es einfach! Das spart nach Erfahrung doch Zeit bei der Fehlersuche und dem Einholen vom Rat. Ich habe nur die ersten Zeilen der Batch gelesen, dann, ich muss das nicht mehr haben, ich will das nicht nachbauen. So verschachtelte For-Schleifen, funktioniert das überhaupt mit dem cmd? Ich bin mir da nicht sicher. Zum Testen kann man in den Ablauf den Befehl Pause einfügen, mehrmals. Und dann die Fehlerausgaben anschauen und auch in eine Datei schreiben. vor 17 Stunden schrieb casi4712: Die Variable %Host% wird ignoriert. Die Variable ist wohl ohne relevanten Inhalt, warum wohl? Ich habe da die Svhleifenkonstruktion in Verdacht. Die For-Schleife funktioniert nicht wie die einer höheren Programmiersprache. bearbeitet 16. Februar 2020 von lefg Zitieren Link zu diesem Kommentar
casi4712 0 Geschrieben 16. Februar 2020 Autor Melden Teilen Geschrieben 16. Februar 2020 @Nils: An welcher Stelle bin ich denn aufgeregt? Oder hattest Du etwa vor mich zu Aufregen zu bringen;) Ich hatte lediglich gefragt, ob jemand hier Hilfestellung leisten kann. 90% meines Scripts hab ich selber fertig gemacht, un das läuft wie es soll, also diesem Vorwurf, muss ich mich wohl auch nicht aussetzen. Ich denke ich hätte das Gesamtproblem hier nicht schildern dürfen, sondern meine Frage auf die spezielle Zeile, die mir fehlt reduzieren sollen, ich versuchs also noch mal: Ich möchte auf einem Remoterechner den Namen auslesen und diesen zur weiteren Verwendung in eine Variable abspeichern. Ich habe versucht Delayed Expansion an meine Zeile voranzustellen, das war ja wohl der Vorschlag denn Du meitest, ging leider auch nicht. Es geht nur um eine Zeile, mehr kann das nicht sein, und in Powershell geht es sich auch nicht kürzer. @test ja es ist eine ADS Umgebung voirhanden, und nein das ist auch nicht mein Passwort, das werde ich auxh nicht im Klartest mit aufnehmen. Klar könnte ich auch ne Liste der Rechnernamen vorher machen und die als Eingabeliste verwenden, aber dann haääte ich ja noch mehr Arbeit, spricht doch nichts gegen eine Schleife @Lefg: Das mit dem fremden Code sehe ich ja genauso, für mich, als jemand der vielleicht alle paar Jahre was scriptet, ist es auch schwer sich in anderen Code hineinzuarbeiten, wenn Ihr das schon sagt ;) Deshalb habe ich meine Frage ja auch losgelöst von dieser Schleifenproblematik gestellt. Liebe Grüße und schönen Sonntag Gruss Chris Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) vor 17 Minuten schrieb casi4712: Ich möchte auf einem Remoterechner den Namen auslesen und diesen zur weiteren Verwendung in eine Variable abspeichern. Denke das mal neu! Nicht auf den Remoterechner zugreifen! Lass den Client auf den Server schreiben! bearbeitet 16. Februar 2020 von lefg Zitieren Link zu diesem Kommentar
casi4712 0 Geschrieben 16. Februar 2020 Autor Melden Teilen Geschrieben 16. Februar 2020 danke noch mal, aber ich dachte eben erst da kommt noch was? wie soll das denn gehen? Habe so langsam den Eindruck für diese simple Aufgabenstellung doch noch am Ende irgend eine Hochsprache zu benötigen.;) LG chris Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) Momentan fällt mir nichts ein, was ich noch raten könnte, mir scheint, es ist alles wesentliche geraten und ausreichend diskutiert. vor 56 Minuten schrieb casi4712: Habe so langsam den Eindruck für diese simple Aufgabenstellung doch noch am Ende irgend eine Hochsprache zu benötigen.;) Die Quasi-Hochsprache ist Powershell. bearbeitet 16. Februar 2020 von lefg Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 vor 2 Stunden schrieb testperson: Alleine schon das Passwort im Klartext ist ein No-Go, was aber gleichermaßen für die PowerShell gilt. Da stimme ich Dir zu. Dafür gibt in der PowerShell ja den „SecureString“ ( Oder in .Net ) Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) vor 19 Stunden schrieb casi4712: @Echo Off Deaktiviere das, lasse die Ausgabe zu. Dann setze Pause ein an mehreren Stellen besonders bei den Schleifen und schau mal wo was passiert. vor 5 Minuten schrieb MurdocX: vor 2 Stunden schrieb testperson: Alleine schon das Passwort im Klartext ist ein No-Go, was aber gleichermaßen für die PowerShell gilt. Da stimme ich Dir zu. Dafür gibt in der PowerShell ja den „SecureString“ ( Oder in .Net ) Ich halte das im Kontext für eine Nebensächlichkeit hier, es hilft dem TO nicht weiter. Der TO will wegen seines Problems nicht erst Ps lernen. bearbeitet 16. Februar 2020 von lefg Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 (bearbeitet) Du machst es Dir aber auch schwer. Wenn ich Dich richtig verstanden habe, möchtest Du eine IP-Range scannen und die antwortenden Computer mit deren Namen irgendwie weiterverarbeiten, richtig? Anstatt administrativ auf jeden Computer zuzugreifen und ihn dazu zu bringen, seinen eigenen Namen rauszurücken, wie beim Durchzählen beim Morgenappell, würde ich mir die in einem AD üblicherweise zur Verfügung stehende Infrastruktur zu nutze machen. Mit einem "nslookup <IP-Adresse>" löst Du per DNS die IP-Adresse zu einem Namen auf - also ein Reverse Lookup . Du müsstest die Info dann nur noch aus der Textausgabe "rausparsen"/"raus-greppen" ... In Powershell wäre das in diesem speziellen Fall etwas einfacher - ja ich weiß, das hörst Du nicht gern - da kann man auf die Attribute der von der Powershell zurückgelieferten Objekte zugreifen: 2..254 | ForEach-Object { $IP = "192.168.1.{0}" -f $_ if(Test-Connection -ComputerName $IP -Quiet -Count 1){ [PSCustomObject]@{ IP = $IP ComputerName = [System.Net.Dns]::GetHostEntry($IP).HostName } } } Probier's einfach mal - vielleiciht hilft's ja. ... und nicht wundern - je na Menge antwortender Computer in der angegebenen Range, dauert es eine Weile. Vielleicht machst Du zum Testen die Range einfach ein bissl kleiner ... also z.B. nicht 2..254 sonder nur 10..20 wenn Du weißt, dass es Computer gibt, die im letzten Oktett etwas zwischen 10 und 20 haben. Edit: Eine weitere Möglichkeit wäre es, einfach das AD abzufragen. Vorausgesetzt, das erforderliche Modul ist auf Deinem Administrationsrechner installiert (RSAT), kannst Du mit Get-ADComputer -Filter * -Properties IPv4Address | Select-Object Name,IPv4Address alle Computer mit ihren IP-Adressen auslesen. bearbeitet 16. Februar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 16. Februar 2020 Melden Teilen Geschrieben 16. Februar 2020 vor 1 Stunde schrieb lefg: Ich halte das im Kontext für eine Nebensächlichkeit hier, es hilft dem TO nicht weiter. Der TO will wegen seines Problems nicht erst Ps lernen. Meine Aussage bezog sich rein auf die Aussage von Testperson. Das Thema Sicherheit mit Skripten ist wichtig und deshalb ist mein Hinweis durchaus erwähnenswert und nicht nebensächlich Der ein oder andere, als stiller Admin Mitleser, kann das als Tipp für seine Organisation mitnehmen, auch wenn es den TO nicht direkt betrifft. Zitieren Link zu diesem Kommentar
casi4712 0 Geschrieben 16. Februar 2020 Autor Melden Teilen Geschrieben 16. Februar 2020 ich hab nicht gesagt dass ichs nicht gerne höre, aber konkrete Beispiele kommen ja erst jetzt, danke, werd ich morgen mal ausprobieren LG Chris vor 20 Stunden schrieb casi4712: for /D Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.