Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.101
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. Es wäre meiner Meinung nach einfacher, wenn es eine Spalte für die Gruppen gäbe und Du die einfach einem Rutsch den Usern zuweist.
  2. Die Hilfe ist PowerShell eingebaut. Mit "Get-Help <cmdlet>" bekommst Du die Syntax angezeigt. Ausserdem kannst Du, wenn Du den Namen eines cmdlet getippt hast und nicht weißt, wie's weitergeht einfach ein "-" tippen und dann mit Tab durch die Parameter "blättern" oder in der ISE wird Dir, wenn Du den "-" eingibst, schon die Liste der Parameter aufgeklappt. Edit: Noch besser wäre, wenn Du VSCode für die Entwicklung von PowerShell-Code benutzt. Dort bekommst Du die meiste Hilfe.
  3. Warum?
  4. Es hilft meiner Meinung nach sehr dem Verständnis und der Lesbarkeit, wenn man die Parameternamen nicht weglässt. Nutzt man die "Tab-Vervollständigung" ist es auch nicht soo viel mehr zu tippen. Deine Code-Zeile $items = Get-ChildItem -recurse $folderpath "Neuer Ordner" ... würde dann zu ... $items = Get-ChildItem -Path $folderpath -Name "Neuer Ordner" -Recurse ... und ich packe Switch-Parameter immer gern ans Ende des Kommandos.
  5. Ich würde Dir empfehlen, Deinen Code so explizit wie irgend möglich zu schreiben, keine Parameternamen wegzulassen, keine Aliase zu benutzen und so weiter. Das sollte Dir helfen, Deinen eigenen Code zu verstehen. Auch solltest Du, wenn Dein Code nicht das tut, was Du Dir erhoffst, selbst versuchen herauszufinden, warum das nicht so ist. Wenn Du Variablen erzeugst und füllst, lass Dir den Inhalt der Variablen einfach auf der Konsole ausgeben, das sollte Dich schon viel weiter bringen. Und die Methoden aus den Links, die ich Dir in dem anderen Thread gepostet hatte, machen dann den Rest. Wenn das nicht ein Fehler ist, der beim hier reinkopieren passiert ist, suchst Du in Deiner zweiten Code-Zeile nach einer (1) ganz bestimmten XML-Datei ("=.xml") und weist das Ergebnis einer Variablen zu. Eine Schleife über ein einzelnes Element, gibt im besten Fall einfach dieses eine Element wieder aus. In Deiner 4. Code-Zeile liest Du den Inhalt der Datei aus und speicherst ihn als XML-Objekt in der Variablen $xml. In der nächsten Zeile versuchst Du auf das XML-Object zuzugreifen, benutzt aber die falsche Variable - nämlich $xmlobject anstatt $xml. ... was ja nicht heißt, dass der Code fehlerfrei wäre ... ... kann ja auch nicht. Schau Dir doch bitte nochmal an, wie man ein PowerShell-Skript debugged!
  6. ... und ich mach noch ne Packung Treets auf ...
  7. ... oder auf PowerShell umzusteigen ...
  8. Na ma kukn, wie's weitergeht. Wenn Du wieder etwas postest, bitte möglichst das komplette Skript.
  9. Ich fürchte, da machst Du Dir ein bissl was vor. Es gibt in PowerShell verschiedene Ansätze, wie man Schleifen realisieren kann. Einmal die Pipe-Methode und dann die "Klassische" Schleifen-Methode. Schau Dir mal die Beispiele in den Dokus an, die ich oben verlinkt hatte. Die Dateinamen sollten dann in der Schleifenvariablen stecken, damit Du in jedem Schleifendurchlauf genau eine Datei beackerst.
  10. Ich weiß gar nicht, wo ich da anfangen soll .... und das ist nicht böse gemeint. Du hast in den ersten 5 Zeilen 8 Syntax-Fehler. Wenn ich mich nicht irre, hatte ich Dir schon mal empfohlen, Dir als Erstes die Grundlagen von PowerShell im Speziellen und Scripting im Allgemeinen anzueignen. Du tust Dir selbst und uns allen keinen Gefallen, wenn Du das überspringst. Es heißt nicht umsonst "Grundlagen"!! ... alles andere baut darauf auf. Edit: z.B. ist Foreach nicht gleich Foreach .... https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7.1 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_foreach?view=powershell-7.1
  11. Ich fürchte, Du haust da Einiges gehörig durcheinander. Wenn Du eine XML-Datei einliest und das auch als [XML]-Typ, dann solltest Du ausschließlich XML-Methoden für die Manipulation verwenden. Wenn Du eine "einfache String Ersetzung" machen möchtest, brauchst Du nicht explizit den XML-Typ erzwingen.
  12. Was genau steht denn in der Variablen "$FinishedXml"? Wenn Du die Original-XML-Dateien überschreiben möchtest, solltest Du an der Stelle die gleiche Variable eintragen, die Du an der Stelle hast, wo Du die Datei einliest!! And BTW: ... hab ich grad erst drauf geachtet - meistens ist es keine gute Idee, in einer XML-Datei mit einfachen String-Ersetzungen zu arbeiten. Was stört denn an den Attributen?
  13. Das hatten wir doch in Deinem anderen Thread schon mit gezeigt ... wenn Du eine XML-Datei mit ... $XmlData = [xml](Get-Content -Path 'C:\Users\MeinName\Desktop\DE_nv2040.xml') eingelesen hast, kannst Du sie mit .... $XmlData.Save('C:\Users\MeinName\Desktop\DE_nv2040.xml') speichern. Nur dass Du in diesem Fall eben keine direkten Pfade angibst, sondern Variablen.
  14. Für PowerShell-Skripte wäre das möglich. ... es sei denn, ich hab da wieder etwas falsch verstanden.
  15. Wenn ich das als XML-Datei speichere und versuche zu importieren, bekomme ich schon eine Fehlermeldung - Du nicht? PowerShell hält das nicht für valides XML. v7.1.4 : InvalidArgument: Cannot convert value "System.Object[]" to type "System.Xml.XmlDocument". Error: "The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type." v5.1 Der Wert "System.Object[]" kann nicht in den Typ "System.Xml.XmlDocument" konvertiert werden. Fehler: "Der angegebene Knoten konnte nicht als gültiger untergeordneter Knoten eingefügt werden, da der angegebene Knoten den falschen Typ hat." In Zeile:1 Zeichen:1 + $XmlData = [xml](Get-Content -Path 'D:\sample\DE_nv2040_orig.xml') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastToXmlDocument
  16. Hmmm ... ne ... ohne die Original-Daten habe ich das Problem einfach nicht ... sorry Jetzt kannst Du lernen, wie man ein PowerShell-Skript debugged! https://devblogs.microsoft.com/scripting/debugging-powershell-script-in-visual-studio-code-part-1/ ... oder hier ... 'n Video ...
  17. Tja .. .was soll ich dazu sagen ... ich hab's grad nochmal getestet - sowohl mit PS v5.1 als auch mit v7.1.4. Und was soll ich sagen - es funktioniert mit den Daten, die ich gepostet habe genau so wie ich es gepostet habe.
  18. Oder man hat etwas Vernünftiges gekauft und kann den Server auch per iDRAC oder ILO-Board oder so bedienen.
  19. Willkommen im MCSEboard. Ich hätte die Anfrage eher ins Scripting-Unterforum gestellt, aber sei's drum ... Das würde mich doch sehr wundern, da das schon eine recht spezifische und komplexe Anforderung ist. Dass Du ein Laie bist, heißt ja nicht, dass das auch für alle Zeiten so bleiben muss. Wie gesagt ... bei so spezifischen Abfragen ist es eher unwahrscheinlich, dass schon mal jemand haargenau das Gleiche benötigt hat und das auch noch im Netz veröffentlicht. Aber die ein oder andere Abfrage wird ja vermutlich wenigstens einen Teil Deiner Anforderung erfüllt haben, oder? Poste doch einfach, was Du schon hast und wir schauen mal, ob wir damit ein bissl weiterkommen.
  20. ... hmmm ... das ist hier kein Unterricht, in dem ich Dich auffordere Dinge zu mutmaßen. ... benutz Deine favorisierte Internet-Suchmaschine und fang an zu suchen!! Lies Dir Kenntnisse an! Ich empfehle, mit der offiziellen Doku für die Befehle anzufangen, die in dem Code-Schnipsel verwendet werden. Die Grundlagen von PowerShell wären auch nicht schlecht ... die helfen Dir, schneller zu Ergebnissen zu kommen. Und Du darfst und solltest natürlich auch selbst Dinge herausfinden. Du hast eine PowerShell-Console vor Dir? ... dann probierst Du mal dies und mal das und lernst nebenbei wie das Ganze funktioniert.
  21. Hmmm ... das Konzept einer Internet-Suchmaschine ist Dir bestimmt geläufig, oder? Als Aller-Aller-Erstes, wenn Du etwas nicht weißt, solltest Du versuchen, darüber selbst etwas rauszufinden. Erst wenn Du damit wirklich nicht weiterkommst, fragst Du jemanden, der es wissen könnte. Davon unabhängig ... was könnte denn das Wort "SearchBase" in so einem technischen Zusammenhang bei Thema Active Directory bedeuten?
  22. OK, ich glaube zwar, dass diese Frage eher in das Scripting-Unterforum gehört, aber damit wir hier endlich mal zu Potte kommen, hier mal eine Idee von mir. Wenn ich das nicht falsch verstanden habe, möchtest Du alle User die in mindestens einer Gruppe sind, deren Name mit dem Buchstaben "V" beginnt, dem 8 beliebige Ziffern folgen, richtig? Ich würde in diesem Fall einfach nach den Gruppen suchen, die diese Bedingung erfüllen und dann deren Mitglieder auflisten. $SearchBase = 'OU=Berlin,OU=Germany,OU=Europe,DC=contoso,DC=com' $GroupMemberList = Get-ADGroup -Filter "Name -like 'V*'" -SearchBase $SearchBase | Where-Object -Property Name -Match -Value '^v\d{8}' | ForEach-Object { Get-ADGroupMember -Identity $_.sAMAccountName } Da zu erwarten ist, dass einige Konten mehrfach auftauchen, kannst Du entweder direkt ein "| Select-Object -Unique" anhängen oder es in einem zweiten Schritt machen: $GroupMemberList | Select-Object -Unique Edit: Achja ... falls Du für die Lösung der Aufgabe ein Lob bekommen solltest, möchte ich, dass Du sagst, dass Du das nicht allein geschafft hast und dass Du dieses Forum hier erwähnst!!!!! ... und es wäre empfehlenswert - besonders für Dich selber - wenn Du versuchst, zu verstehen, was genau der Code tut.
  23. Du machst es Dir und anderen gern schwerer als nötig, oder? Wenn es sich um so ein kurzes Skript handelt, poste am Besten das ganze Skript - nicht nur einen Teil. Und es wäre nett, wenn Du nicht ganz so viel White-Space postest - das macht den Code schwerer lesbar. Wenn Du innerhalb der Schleife einen Node identifiziert hast, der aufgeteilt werden soll - Du also bereits an der Stelle bist, die Du nach dem Aufsplitten entfernen möchtest - solltest Du genau diesen Node auswählen - nicht pauschal alle Nodes!! Also nicht .SelectNodes() auf alle Nodes FVALUE sondern nur den einen, den Du grad bearbeitest!! Input: <?xml version="1.0" encoding="UTF-8"?> <BMECAT> <T_NEW_CATALOG> <PRODUCT mode="new"> <PRODUCT_FEATURES> <FEATURE> <FNAME></FNAME> <FVALUE>XYZ; 52; green </FVALUE> <FORDER></FORDER> </FEATURE> <FEATURE> <FNAME></FNAME> <FVALUE>XYZ; 53; blue </FVALUE> <FORDER></FORDER> </FEATURE> <FEATURE> <FNAME></FNAME> <FVALUE>Bla keks ohne semikolon</FVALUE> <FORDER></FORDER> </FEATURE> </PRODUCT_FEATURES> </PRODUCT> </T_NEW_CATALOG> </BMECAT> Code: $XmlData = [xml](Get-Content -Path 'C:\Users\MeinName\Desktop\DE_nv2040.xml') foreach ($Feature in ($XmlData.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) { if ($Feature.FVALUE -match ";") { $SplittedFVALUE = ($Feature.FVALUE -split ';').trim() foreach ($Value in $SplittedFVALUE) { $child = $XmlData.CreateNode("element", "FV", "") $child.InnerText = $Value $Feature.AppendChild($child) } $ItemToRemove = $Feature.SelectSingleNode('FVALUE') $Feature.RemoveChild($ItemToRemove) } } $XmlData.Save('C:\Users\MeinName\Desktop\DE_nv2040_new.xml') Output: <?xml version="1.0" encoding="UTF-8"?> <BMECAT> <T_NEW_CATALOG> <PRODUCT mode="new"> <PRODUCT_FEATURES> <FEATURE> <FNAME> </FNAME> <FORDER> </FORDER> <FV>XYZ</FV> <FV>52</FV> <FV>green</FV> </FEATURE> <FEATURE> <FNAME> </FNAME> <FORDER> </FORDER> <FV>XYZ</FV> <FV>53</FV> <FV>blue</FV> </FEATURE> <FEATURE> <FNAME> </FNAME> <FVALUE>Bla keks ohne semikolon</FVALUE> <FORDER> </FORDER> </FEATURE> </PRODUCT_FEATURES> </PRODUCT> </T_NEW_CATALOG> </BMECAT>
  24. Ein Zertifikat kostet wohl eher so um die 15€. Und da Du ja sowieso bezahlt wirst, könntest Du doch die entsprechende Konfiguration erledigen - es ist ja schließlich keine Geheimwissenschaft, die einen Doktor-Titel für's Verständnis erfordert. Und 15€ auf die Steuerzahler umgelegt, ist bestimmt ein guter Deal.
  25. Also erstmal: "Probieren geht über Studieren!!" ... was kann denn Schlimmes passieren, wenn Du es einfach ausprobierst ... im Zweifel lernst Du, dass es so eben nicht funktioniert. Und dann die ganz ehrlich gemeinte Frage "Warum? Was willst Du eigentlich erreichen? Was soll das Ganze?" Ich würde davon ausgehen, dass überflüssige Nodes einfach ignoriert werden. Also wenn eine Software einen Node oder eben mehrere Nodes <FV> unterhalb von <FEATURE> erwartet, es einen existierenden Node <FVALUE> einfach ignoriert. Wozu? Stört das? Wenn man mit .CreateNode() einen neuen Node erzeugen kann, gibt es bestimmt auch eine Methode, wie man existierende Nodes entfernen kann. Wenn Du das nicht möchtest, musst Du eine Abfrage einbauen, die entweder prüft, ob ein Semikolon enthalten ist oder ob das Aufspalten am Semikolon mehr als ein Element zurückgeliefert hat. Hier gibt's die Doku dazu: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_if?view=powershell-7.1 Wie oben schon erwähnt ... man kann existierende Nodes entfernen oder ändern und auch neue Nodes erzeugen und generell alles machen, was man gerne möchte. Wenn jetzt aber mit jeder neuen Antwort von Dir, die eigentliche Aufgabe geändert wird, fühle ich mich ehrlich gesagt verars***t und hab keine Lust mehr. ... und übrigens ... Das xmlns="" ist ein XML-Attribut und sollte meiner Meinung nach standard-konforme Tools nicht stören, wenn es nicht erwartet oder gebraucht wird. Hier noch ein wenig Literatur: https://www.w3schools.com/xml/default.asp https://powershellmagazine.com/2013/08/19/mastering-everyday-xml-tasks-in-powershell/ https://adamtheautomator.com/powershell-parse-xml/ https://www.heise.de/ix/artikel/Datenzugriff-506816.html
×
×
  • Neu erstellen...