Benutzer mit den meisten Antworten
Verfuegbare Hostnamen aus Active Directory auslesen mit Powershell

Frage
-
Hallo Zusammen,
Ich möchte im Rahmen einer SCCM Task Sequence ein Powershell Script laufen lassen, welches einen Hostnamen nach Namenskonvention abfragt und diesen auf Verfügbarkeit im Active Directory überprüft.
Ich habe dazu folgendes Script im Internet gefunden:$Prefix = $EnteredHostname -match '^(.*?)\d*$' | Out-Null # strip possibly trailing numbers $Prefix = $Matches[1] $Number = 0 # initialize last Number to zero Get-ADComputer -Filter * | Where-Object {$_.Name -match "^$Prefix(\d+)$" }| Select-Object @{n='UsedNumber';e={[int]$Matches[1]}} | Sort-Object UsedNumber | ForEach-Object { While ($Number +1 -lt $_.UsedNumber){"{0}{1}" -f $Prefix,++$Number} $Number = $_.UsedNumber } # if there was no gap get the next one. "{0}{1}" -f $Prefix,++$Number
(Vorher kommt eine Textbox, in der der Hostname abgefragt und in die Variable $enteredHostname geschrieben wird)
Das Script funktioniert an sich sehr gut, allerdings werden hier immer nur die letzten Ziffern ausgelesen.
Wir haben in unserem Unternehmen aber die Namenskonvention "HostnameXXXX". Zum Beispiel Hostname0005, Hostname0015, Hostname0150, etc.
Dieses Script liefert mir nur --> Hostname5, Hostname15, Hostname150, ..
Ich habe es leider nicht geschafft, es auf unsere Namenskonvention anzupassen (Arbeite erst seit ein paar Wochen mit Powershell)
Hat Jemand einen Vorschlag, was ich ändern kann, damit die letzten vier Zahlen ausgelesen und verarbeitet werden?Vielen Dank im Voraus!
- Bearbeitet MoritzMM Montag, 29. April 2019 11:32 code Fehler
Antworten
-
Moin,
erstens: Bitte Code als Code formatieren (dafür gibt es einen Button im Editor).
zweitens: Wenn die fehlenden führenden Nullen Dein einziges Problem sind, kann ich Dir helfen: schreib einfach statt
"{0}{1}" -f $Prefix,++$Number
das, was Du brauchst: Zahl auf vier Stellen aufgefüllt
"{0}{1:D4}" -f $Prefix,++$Number
Allerdings könnte ich mir einige Optimierungen vorstellen, wie z.B. das Matchen nach $Prefix bereits bei der Abfrage aus dem AD verwenden:
Get-ADComputer -Filter {name -like "$Prefix*"}
Je nachdem, wie groß euer AD ist, kann es durchaus was bringen ;-)
Evgenij Smirnov
- Als Antwort markiert MoritzMM Montag, 29. April 2019 11:53
-
Hallo Moritz und Willkommen im Deutschen Microsoft Powershell Forum.
Wenn Du hier Code postest, formatier den doch bitte als Code. Dafür gibt es auf der Symbolleiste des Post-Editors extra ein ICON (das zweite von rechts). Das verhindert ungewollte Zeilenumbrüche und formatiert den Code besser lesbar und so weiter.
Wir supporten hier normalerweise keine Scripte, die Du im Internet gefunden hast. Wenn Du einen Fehler in so einem Script findest, oder eine andere Anforderung hast, solltest Du den Author kontaktieren.
In Deinem Fall solltest Du Dich mit dem Format-Operator "-f" beschäftigen. In Deiner 9. und der letzten Code-Zeile solltest Du "{1}" durch "{1:000#}" ersetzen.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
Alle Antworten
-
Moin,
erstens: Bitte Code als Code formatieren (dafür gibt es einen Button im Editor).
zweitens: Wenn die fehlenden führenden Nullen Dein einziges Problem sind, kann ich Dir helfen: schreib einfach statt
"{0}{1}" -f $Prefix,++$Number
das, was Du brauchst: Zahl auf vier Stellen aufgefüllt
"{0}{1:D4}" -f $Prefix,++$Number
Allerdings könnte ich mir einige Optimierungen vorstellen, wie z.B. das Matchen nach $Prefix bereits bei der Abfrage aus dem AD verwenden:
Get-ADComputer -Filter {name -like "$Prefix*"}
Je nachdem, wie groß euer AD ist, kann es durchaus was bringen ;-)
Evgenij Smirnov
- Als Antwort markiert MoritzMM Montag, 29. April 2019 11:53
-
Hallo Moritz und Willkommen im Deutschen Microsoft Powershell Forum.
Wenn Du hier Code postest, formatier den doch bitte als Code. Dafür gibt es auf der Symbolleiste des Post-Editors extra ein ICON (das zweite von rechts). Das verhindert ungewollte Zeilenumbrüche und formatiert den Code besser lesbar und so weiter.
Wir supporten hier normalerweise keine Scripte, die Du im Internet gefunden hast. Wenn Du einen Fehler in so einem Script findest, oder eine andere Anforderung hast, solltest Du den Author kontaktieren.
In Deinem Fall solltest Du Dich mit dem Format-Operator "-f" beschäftigen. In Deiner 9. und der letzten Code-Zeile solltest Du "{1}" durch "{1:000#}" ersetzen.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''