Jump to content
casi4712

Liste der Rechnenamen

Recommended Posts

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

Share this post


Link to post
Share on other sites

Moin,

 

Für verschachtelte Schleifen brauchst du Delayed Expansion.

 

Tu dir einen Gefallen und mach sowas nicht per Batch.

 

Gruß, Nils

  • Like 1

Share this post


Link to post
Share on other sites

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 ;)

Edited by casi4712

Share this post


Link to post
Share on other sites

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

 

Edited by NilsK
Ergänzung

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

Edited by lefg

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
Share on other sites
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!

Edited by lefg

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Edited by lefg

Share this post


Link to post
Share on other sites
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 ) 

Share this post


Link to post
Share on other sites
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.

Edited by lefg

Share this post


Link to post
Share on other sites

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.  ;-) 

Edited by BOfH_666

Share this post


Link to post
Share on other sites
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. 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...