Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.083
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. <SCNR> "schick" und "Einzeiler" .... uuuuhhh ... da schüttelt's mich ... </SCNR>
  2. (Select-String -Path 'Pfad zu Deiner Text-Datei' -Pattern '(?<=Phone).+(?=$)' | Select-Object -ExpandProperty Matches).Value
  3. Supi. Markier doch bitte den Code-Schnipsel noch als Lösung. Dann finden andere, die das gleiche oder ein ähnliches Problem haben, die Lösung hoffentlich ein wenig schneller. Danke.
  4. Hallo Puschkin, wir liefern hier üblicherweise keinen gebrauchsfertigen Code auf Anfrage. Du wirst Dir schon selbst ein bissl Mühe geben müssen. Hast Du denn schon mal gesucht, ob Du was Passendes finden kannst. Meistens ist man ja nicht der Erste, der nach einer Lösung sucht. Wofür brauchst Du denn überhaupt so etwas Altertümliches? 2020 sollten doch etwas längere Pfade kein Problem mehr sein.
  5. Du machst es Dir aber auch schwer ... $CimSession = New-CimSession -ComputerName 'Print01' -Credential $Credentials Get-CimInstance -CimSession $CimSession -ClassName Win32_Printer | Select-Object -Property ShareName | Out-File C:\Drucker\Printer_List.txt Remove-CimSession -CimSession $CimSession Um die Probleme zu umgehen, dass es quasi keine einfache Möglichkeit gibt, Credentials sicher für die Benutzung in Scripten zu speichern, könntest Du einfach die Aufgabenplanung benutzen. Du erstellst eine entsprechende Aufgabe mit den nötigen Anmeldedaten und führst diese bei Bedarf aus. Dann lässt Du den ganzen Credentials-Kram im Script einfach weg.
  6. ... und Get-WmiObject sollte auch nicht mehr benutzt werden. Es gibt das moderne Get-CimInstance ... meistens auch noch schneller ... und mit dem Parameter -ComputerName kannst Du das auch remote benutzen ... ohne Invoke-Command.
  7. ... nur ein kleiner Tipp, um Deinen Code leichter lesbar zu machen. Bei cmdlets, die ziemlich viele Parameter erfordern oder verdauen, liest sich der Code leichter, wenn man Splatting benutzt ... so ungefähr: $SendMailProps = @{ To = 'empfaenger@maildomain.tld' Subject = 'HyperV-Replica Alarm' Body = Get-Content -Path $Info_Datei | Out-String SmtpServer = $Mail_Server From = $Mail_Absender } Send-MailMessage @SendMailProps Hier was zum Nachlesen: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting?view=powershell-7
  8. BOfH_666

    2x DHCP im LAN

    oooops ... hihihi ... hier ... nimmste das "h" ... und falls in Zukunft mal wieder ewtas fehlt ..... "abcdefghijklmnopqrstuvwxyz" ... nimmste Dir dann, was'de brauchst.
  9. BOfH_666

    2x DHCP im LAN

    Jaaa .... wenn ein LKW gegen enen flotten offenen Sportwagen antritt, hat er halt mal Pech.
  10. BOfH_666

    2x DHCP im LAN

    ... 'kenn ich auch so. Und wer zuerst kommt und malt zuerst, oder?
  11. Dienste werden doch nicht vom Domänen-Admin gestartet.
  12. Wenn ich die Doku richtig verstehe, liefert es die "Settings" der VM mit dem angegebenen Status. Gib den Befehl doch einfach mal auf der Konsole ein und sieh, was Du als Ausgabe erhältst. Wenn da kein "$true" dabei ist, wird's nix.
  13. Hier noch 'n bissl Extra-Lektüre : Use PowerShell delete a user profile (step-by-step guide) - https://adamtheautomator.com/powershell-delete-user-profile/
  14. hhhmmmm .... warte mal .... aber man kann die Denkfehler im Code manifestieren ...
  15. Du hast Tippfehler und Denkfehler in Deinem Code. foreach ($element in $object) { Invoke-RestMethod -Method Post -Uri $element.url -Body $element.body -Headers $element.header -OutFile .\log_$($element.body).out } Mit diesem Schnipsel schreibst Du jeden einzelnen "output" in eine eigene Datei. Wenn alles in einer Datei landen soll, musst Du diesen Export außerhalb der Schleife erledigen. Du könntest erstmal allen Output in einer Variable einsammeln und das dann gesammelt in eine Datei exportieren ... so ungefähr: $Result = foreach ($element in $object) { Invoke-RestMethod -Method Post -Uri $element.url -Body $element.body -Headers $element.header } $Result | Out-File -FilePath .\log.log
  16. den Code-Schnipsel mit dem man eine IP-Adresse in einen Namen auflöst habe ich Dir gepostet.
  17. .... immernoch dabei, den Hostnamen zu einer bestimmten IP-Adresse zu ermitteln? Du sagtest doch, dass Du in einer AD Domäne unterwegs bist, oder? Warum benutzt Du nicht eine von den Clients unabhängige Methode, um die gewünschte Information zu erhalten?
  18. .... "völlig neu" ist gut. Die Powershell ist inzwischen 13 Jahre alt. Du hast es also schon ziemlich lange geschafft, Dich einer neuen Technologie zu verweigern. ... und 13 Jahre sollten genügen, sich so ein Hype-Thema mal anzusehen. Das liegt meiner Meinung nach an der Art, wie Du Deine Fragen stellst. Du fragst nicht, wie man ein Problem lösen könnte, sondern was man an Deinem Code ändern kann, damit er läuft. Bei den meisten Fragen erklärst Du nicht mal, was das eigentliche/große Ziel ist. Hier in diesem Thread hast Du schon mehrere alternative Ansätze erhalten, die Du ja wohl noch prüfen wolltest. Davon abgesehen, liefern wir hier auch ungern fertige Lösungen frei Haus, wenn der Fragende nicht selbst ein wenig Mitarbeit anbietet. Die meisten von uns - Du vermutlich auch - werden dafür normalerweise bezahlt und machen das dann hier nicht kostenlos. ... und ja - bei schriftlicher Kommunikation in einem Forum, wo man eben keine Mimik und Gestik übertragen kann, kann man schon mal einen unerwünschten Eindruck vermitteln.
  19. Das ist der Eindruck, den Du vermittelst.
  20. Ich denke auch, dass das nicht passieren wird und es ist auch nicht angekündigt oder so. Es hat aber niemand behauptet, dass der Code für Powershell kürzer wäre. Es ist sogar meistens eher das Gegenteil. Und das Meiste an diesem Beispiel ist der robocopy-Befehl und der muss ja in beiden Versionen quasi gleich sein. Durch die ausführlicheren Befehle ist der Powershell-Code aber für Menschen auch einfacher zu lesen und zu verstehen. Bei einem Befehl "Get-Content" oder "Get-Process" oder "Get-Service" braucht niemand raten, was die Befehle wohl machen könnten. Bei CMD/Batch-Befehlen die nur 2 Buchstaben lang sind, ist das schon ein bissl kniffliger. Und wenn es dann mit Optionen und Schaltern weitergeht, hat man meistens nur noch einen Buchstaben und Sonderzeichen machen es auch nicht besser ... also z.B. "/D %%t" ... wenn DU ehrlich bist, musst Du zugeben, dass das alles andere als intuitiv und verständlich ist - wenigstens am Anfang.
  21. 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.
  22. Um bei Deiner Analogie zu bleiben: Ein geübter Holzfäller schafft es ganz leicht, sich mit seiner frisch geschärften Axt ein Brötchen zu schmieren. Schaffst Du es, mit einem Brotmesser einen Baum zu fällen? foreach ($Element in (Get-Content -Path .\local.txt)){ robocopy "$ENV:USERPROFILE\AppData\Local\$Element" "$PSScriptRoot\set\profile\$ENV:USERNAME\AppData\Local\$Element" /PURGE /B /E /R:0 /ZB>nul 2>&1 } Die Powershell ist am Ende des Tages ja trotzdem immernoch eine normale Shell und für einfache Aufgaben sind die Unterschiede zwischen den Shells nicht soo groß. Der Punkt - für mich - ist, dass die CMD/Batch bei komplexeren Aufgaben schnell kryptisch wird und an quasi unüberwindbare Grenzen stößt, wo die Powershell eben weitergeht. Aber so lange Du mit CMD/Batch zufrieden bist und zum Ziel kommst, kannst Du es ja auch weiter nutzen. MS wird Dir vermutlich keine Steine in den Weg legen. Ich glaube, dass ICH Dir die Grundlagen in einer halben Stunde vermitteln könnte.
  23. Hmmm ... ich weiß ja nicht, warum Du Dich so gegen die deutlich modernere Technologie sträubst, aber ich fürchte, Du hast den eigentlichen Vorteil von Powershell noch nicht erkannt. Der wirklich nutzbringende Mehrwert von Powershell ist eigentlich gar nicht die "Power", die die Shell gegenüber CMD/Batch hat, sondern die sehr sehr viel flachere Lernkurve. Die Powershell ist nicht für Programmierer gemacht, sondern für Administratoren. Gerade für solche - nicht abfällig gemeint - Pille-Palle-Aufgaben wie hier in diesem Thread, brauchst Du keine krude gehirnverrenkende Syntax aus dem letzten Jahrtausend beherrschen. Die Grund-Idee von Powershell hast Du Dir innerhalb einer halben Stunde draufgeschafft und von da an geht es nur noch steil bergauf. Jeder, der ansatzweise der englishen Sprache mächtig ist, kann auch ohne langes Studium die Syntax von Powershell sehr einfach verstehen. Und wenn man dann erstmal die Grundlagen drauf hat, dann geht der Spaß erst richtig los, weil man sich jetzt mit der gleichen einfachen Syntax die richtig kniffligen Aufgaben vornehmen kann. Und nicht zuletzt bekommt man bei Problemen mit Powershell-Code schneller und mehr und meistens auch bessere Hilfe, weil sich auch viel mehr Menschen damit beschäftigen und sich mehr damit auskennen.
  24. Mir fällt dazu auch nix Intelligentes ein, aber ich hätte eine Frage: Warum erstellst Du nicht einfach eine neue VM mit W10 quasi neben der W7 VM? Bei einem physischen Rechner verstehe ich ja noch den Wunsch nach dem Upgrade, auch wenn ich kein großer Fan davon bin, aber bei einer VM sollte es doch einfacher sein, oder?
  25. Na ma kukn wer zuletzt lacht. ... irgendwann kommst Du an die Grenze, über die Du mit CMD nicht drüber kommst.
×
×
  • Neu erstellen...