-
Gesamte Inhalte
2.100 -
Registriert seit
-
Letzter Besuch
Alle erstellten Inhalte von BOfH_666
-
Powershell Dateien zwischen 2 Daten Löschen
BOfH_666 antwortete auf ein Thema von Saufi666 in: Windows Forum — Scripting
Wenn ich das jetzt richtig verstanden habe, sind die Text-Dateien dann also jeweils genauso alt wie die PDF-Dateien. Dann brauchst Du doch nur Deinen "Suchfilter" von "nur PDF" auf "PDF und TXT" erweitern und bist am Ziel!? Oder hab ich's doch noch nicht richtig verstanden? -
Exchaneg public folder - ParentPath
BOfH_666 antwortete auf ein Thema von rakli in: Windows Forum — Scripting
Was heißt: "Warum funktioniert .... nicht?" Was funktioniert denn nicht? "fl" ist der Alias für Format-List und mit "pa*" schränkst Du die Ausgabe auf alle Eigenschaften ein, die mit "pa" beginnen. Das ergibt bei mir z.B. "ParentFolder" und "ParentPath". Bei mir funktioniert das. Dafür funktioniert in meiner Umgebung der erste Befehl so nicht. (Exchange 2013 auf Windows Server 2012R2). -
Powershell Array-Ausgabe verändern, sortieren, korrigieren
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
Du machst Dir's gern selbst ein bissl schwer, oder? ;) # *** THIS SCRIPT IS PROVIDED WITHOUT WARRANTY, USE AT YOUR OWN RISK *** $testcomputers = "PCHostName1", "PCHostname2" #oder Get-Content -Path 'C:\computers.txt' $exportLocation = 'C:\pcInventoryPC.csv' # PC Connection Test bevor die PC´s ihre Inventur bekommen (Wenn online = speichern in live-PCs.txt Start Inventory, wenn offline = Gespeichert in dead.pcs.txt = keine Aktion) foreach ($computer in $testcomputers) { if (Test-Connection -ComputerName $computer -Quiet -count 1){ Add-Content -value $computer -path C:\livePCs.txt }else{ Add-Content -value $computer -path C:\deadPCs.txt } } # Nun wissen wir welche PC online sind # Prozedur mit der Inventory $computers = Get-Content -Path 'C\livePCs.txt' $Inventory = foreach ($computer in $computers) { $Bios = Get-WmiObject win32_bios -Computername $computer $Hardware = Get-WmiObject Win32_computerSystem -Computername $computer $Sysbuild = Get-WmiObject Win32_WmiSetting -Computername $computer $OS = Get-WmiObject Win32_OperatingSystem -Computername $computer $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $computer | Where-Object {$_.IPEnabled} $driveSpace = Get-WmiObject win32_volume -computername $Computer -Filter 'drivetype = 3' | Select-Object PScomputerName, driveletter, label, @{LABEL='GBfreespace';EXPRESSION={'{0:N2}' -f($_.freespace/1GB)} } | Where-Object { $_.driveletter -match 'C:' } $cpu = Get-WmiObject Win32_Processor -computername $computer $username = Get-ChildItem "\\$computer\c$\Users" | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime -first 1 [ARRAY]$MonitorList = Get-WmiObject -Class WMIMonitorID -Namespace root\wmi -ComputerName $computer [PSCustomObject]@{ ComputerName = $Computer.ToUpper() Manufacturer = $Hardware.Manufacturer Model = $Hardware.Model Processor_Type = $cpu.Name System_Type = $Hardware.SystemType Operating_System = $OS.Caption Operating_System_Version = $OS.version Operating_System_BuildVersion = $SysBuild.BuildVersion Serial_Number = $Bios.serialnumber IP_Address = $Networks.IpAddress[0] MAC_Address = $Networks.MACAddress Last_User = $username.Name User_Last_Login = $username.LastWriteTime 'C:_FreeSpace_GB' = $driveSpace.GBfreespace Total_Memory_GB = [math]::round($Hardware.TotalPhysicalMemory/1024/1024/1024, 2) Last_ReBoot = $OS.ConvertToDateTime($OS.LastBootUpTime) Monitor1Hersteller = If($MonitorList[0]){($MonitorList[0].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor1Typ = If($MonitorList[0]){($MonitorList[0].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor1Seriennummer = If($MonitorList[0]){($MonitorList[0].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2Hersteller = If($MonitorList[1]){($MonitorList[1].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2Typ = If($MonitorList[1]){($MonitorList[1].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2Seriennummer = If($MonitorList[1]){($MonitorList[1].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3Hersteller = If($MonitorList[2]){($MonitorList[2].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3Typ = If($MonitorList[2]){($MonitorList[2].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3Seriennummer = If($MonitorList[2]){($MonitorList[2].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} } ### End PSCustomObject } ### End Foreach Computer $Inventory $Inventory | Export-Csv $exportLocation -NoTypeInformation -Force ... den Rest darfst Du gern selbst noch ein bissl verbessern. -
Powershell Array-Ausgabe verändern, sortieren, korrigieren
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
na das klingt doch supi .... dann denke ich, würde es sich für Dich bestimmt lohnen, Dir die Basics von Powershell mal "geordnet, strukturiert und didaktisch vernünftig aufbereitet" überzuhelfen. ;-) Hier sind ein paar Ressourcen verlinkt, die Dir einen guten Einstieg ermöglichen sollten. Besonders die beiden "Jump Starts", die in Jeffrey's Post verlinkt sind, sind sehr zu empfehlen. https://powershell.org/forums/topic/using-csv-files/ -
hmmm .... ich hätte es ja jetzt noch interessant gefunden, zu erfahren, für welche Lösung Du Dich entschieden hast .... ;)
-
Powershell Array-Ausgabe verändern, sortieren, korrigieren
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
.... outsch .. das kommt davon wenn man aus 3 Scripten eins machen will ... Danke für's "Debuggen" .... aber dann hat ja Pikus jetzt quasi gleich noch ein bissl Verbesserungspotential .... na ma kukn, ob er sich nochmal meldet. -
Powershell Array-Ausgabe verändern, sortieren, korrigieren
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
Hmmm ... ok ... bestimmt nicht der eleganteste oder effizienteste Code, aber als Inspirationsquelle sollte es genügen, hoffe ich. $ComputerList = Get-Content -Path 'C:\livePCs.txt' $Inventory = foreach ($ComputerName in $ComputerList) { $SessionOption = New-CimSessionOption -Protocol Dcom $CIMSession = New-CimSession -ComputerName $ComputerName $Bios = Get-CimInstance -ClassName win32_bios -CimSession $CIMSession $Hardware = Get-CimInstance -ClassName Win32_computerSystem -CimSession $CIMSession [ARRAY]$MonitorList = Get-WmiObject -Class WMIMonitorID -Namespace root\wmi -ComputerName $ComputerName [PSCustomObject]@{ ComputerName = $ComputerName.ToUppper() SystemBios = $Bios.serialnumber Monitor1Manufacturer = If($MonitorList[0]){($MonitorList[0].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor1UserFriendlyName = If($MonitorList[0]){($MonitorList[0].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor1SerialNumberID = If($MonitorList[0]){($MonitorList[0].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2Manufacturer = If($MonitorList[1]){($MonitorList[1].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2UserFriendlyName = If($MonitorList[1]){($MonitorList[1].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor2SerialNumberID = If($MonitorList[1]){($MonitorList[1].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3Manufacturer = If($MonitorList[2]){($MonitorList[2].ManufacturerName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3UserFriendlyName = If($MonitorList[2]){($MonitorList[2].UserFriendlyName -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} Monitor3SerialNumberID = If($MonitorList[2]){($MonitorList[2].SerialNumberID -notmatch '^0$' | ForEach-Object {[CHAR]$_}) -join ''}Else{'N/A'} } } $Inventory ... das lässt sich natürlich noch beliebig erweitern oder verbessern. ... na probier erst mal ;) Achso ... Du brauchst Powershell 3.0 wenn ich mich nicht irre ... -
Powershell Array-Ausgabe verändern, sortieren, korrigieren
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
Pikus, es wäre einfacher und schneller, wenn Du beide Abfragen, also PC und Monitore, in einer Schleife erledigst. Du musst Dir dabei nur überlegen, wie Du damit umgehst, wenn ein PC mehr als einen Monitor angeschlossen hast. Wieviele Monitore kann ein PC in Deiner Infrastruktur denn maximal haben? -
Wozu startest Du denn aus einem Befehlsinterpreter (Powershell-Konsole) einen weiteren Befehlsinterpreter (CMD-Konsole)? Die Powershell-Konsole kann ganz wunderbar andere Tools starten ... da brauchst Du keine CMD mehr. Wenn Du die Powershell dann mit erhöhten Rechten startest, läuft auch das darin gestartete Tool mit Adminrechten. Meines Wissens gibt es aber keine einfache und trotzdem sichere Methode, einem PoweshellSkript oder einer Batch-Datei die nötigen Credentials für eine Rechteerhöhung mitzugeben.
-
Powershell Editor - ISE Features
BOfH_666 antwortete auf ein Thema von Alith Anar in: Windows Forum — Scripting
Du kannst für einen kleinen Obulus die ISE erweitern ... mit den ISE-Steroids. Es gibt auch noch das Powershell Studio von Sapien (auch kostenpflichtig aber bestimmt das Geld wert) oder das kostenlose Visual Studio Code. Von MS aber Open Source und erweiterbar -
Erkennen ob Befehle remote ausgeführt werden
BOfH_666 antwortete auf ein Thema von bouncer86 in: Windows Forum — Scripting
... "geht nicht" gibt's nicht ... ;) :cool: :p -
Powershell - Group Policy Dienste deaktivieren
BOfH_666 antwortete auf ein Thema von bouncer86 in: Windows Forum — Scripting
Hmmm ... die Anfrage ist etwas wage ... für Services gibt's ganz normale cmdlets Get-Command -Noun service so kannst Du Dir die in der Konsole oder in der ISE anzeigen lassen. Dann gibt's auch noch Group Policy cmdlets in Powershell Wenn das nicht reicht, brauchen wir mehr Informationen. Was willst Du denn genau erreichen? -
Erkennen ob Befehle remote ausgeführt werden
BOfH_666 antwortete auf ein Thema von bouncer86 in: Windows Forum — Scripting
... nur 'ne Idee: Vielleicht baust Du den Wrapper so, dass es egal ist, ob das Script remote oder lokal ausgeführt wird. ;) -
PS: Eventlog zur Serversicherung auslesen
BOfH_666 antwortete auf ein Thema von Kuddel071089 in: Windows Forum — Scripting
Wow ... auf die geilsten Lösungen kommt man einfach manchmal nicht, wenn man nicht ständig damit arbeitet. :thumb1: :jau: -
PS: Eventlog zur Serversicherung auslesen
BOfH_666 antwortete auf ein Thema von Kuddel071089 in: Windows Forum — Scripting
Get-Eventog ist veraltet und sollte für neue Scripte nicht mehr verwendet werden. Schau Dir einfach mal die Hilfe für Get-WinEvent an .... inclusive der Beispiele ... -
PowerShell: Test-Path
BOfH_666 antwortete auf ein Thema von %_Darwin_% in: Windows Forum — Scripting
Indem Du die die CSV-Datei einliest und dann mit einer Schleife über die einzelnen Elemente "iterierst". z.B. mit einem Foreach oder mit Pipeline und Foreach-Object. -
PowerShell: Test-Path
BOfH_666 antwortete auf ein Thema von %_Darwin_% in: Windows Forum — Scripting
Ja - das ist möglich. :) ;) :thumb1: -
Powershell Script Benutzer Verschieben
BOfH_666 antwortete auf ein Thema von Ray_Jay in: Windows Forum — Scripting
Is jebont ;) ... kommt mit in meine Sammlung ... falls ich's doch mal brauchen kann ... :thumb1: -
Powershell Script Benutzer Verschieben
BOfH_666 antwortete auf ein Thema von Ray_Jay in: Windows Forum — Scripting
Ein Tool, welches seit fast 13 Jahren nicht mehr aktualisiert wurde, würde mich ja erst mal stutzig machen .... ;) ... lässt man das wirklich noch auf aktuelle Installationen los? -
Error.log durchsuchen und "Flag" setzen?
BOfH_666 antwortete auf ein Thema von Sebialt in: Windows Forum — Scripting
Du liest den Inhalt der Datei mit Get-Content ein. Dabei erhältst Du einen String. Den kannst Du zum Integer "casten" und kannst das dann mit Deinem $VarA.Matches.Count vergleichen. ... also ungefähr so [INT]$SavedCount = Get-Content -Path "Pfad\Flag.Txt" ... jetzt hast Du die vorher dort gespeicherte Anzahl in der Variablen $SavedCount und kannst damit weiterspielen. ;) ... was mir noch einfällt ... Du müsstest dann vielleicht noch das Datum der Datei Flag.txt mit beachten, damit Du nicht beim ersten Durchlauf des Tages den "Error-Count" mit dem Vortag vergleichst. ;) -
Error.log durchsuchen und "Flag" setzen?
BOfH_666 antwortete auf ein Thema von Sebialt in: Windows Forum — Scripting
Hmmm ... Du bräuchtest dann wohl doch eine "Zählvariable". Die Kannst Du dann (pro Tag) auswerten und entsprechend reagieren. Oder Du schreibst - so wie Du es oben schon selbst angeregt hast - den "Zähler" in eine Datei und liest diesen dann aus. Was genau fehlt Dir denn für die Umsetzung der Zählvariable? -
Error.log durchsuchen und "Flag" setzen?
BOfH_666 antwortete auf ein Thema von Sebialt in: Windows Forum — Scripting
Wenn es sowieso neu erzeugt wird, kann man es nicht einfach löschen / leeren, nachdem es "bearbeitet" / "gescannt" wurde? -
VB Script - Hilfe gesucht.
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
... per Powershell so hier: If(Test-Connection -Count 1 -Quiet -ComputerName "RemoteComputer"){ Get-Service -Name "Service" -ComputerName "RemoteComputer" | Restart-Service -Force } ... wenn der Host "RemoteComputer" nicht erreichbar ist, wird auch kein Service neu gestartet. ;) :cool: :D <SCNR> Wenn Du das Ganze in ein Script packst und es "parametriesierst" (heißt das überhaupt so?), dann kann man es mit dem Zielcomputer als Parameter aufrufen und die Sache ist erledigt. ... sind wir mal heute nicht so ... (wer kennt noch "Timur und sein Trupp"?) Nur mal so als Startpunkt könnte das dann als Script im einfachsten Fall so aussehen: param( [Parameter(Position=0, Mandatory=$true)] [ValidateNotNullOrEmpty()] [System.String] $ComputerName ) If(Test-Connection -Count 1 -Quiet -ComputerName $ComputerName){ Get-Service -Name "Service" -ComputerName $ComputerName | Restart-Service -Force } Mit einem beliebigen Namen als Powershell-Script (*.ps1) abgespeichert und in einer mit Adminrechten gestarteten Konsole aufgerufen, fragt das Script sogar nach dem Computernamen und startet den Service neu, wenn der Computer erreichbar ist. Den Service-Namen müsstest Du dann im Script natürlich noch entsprechend anpassen. Fragen? Fragen! ;) -
VB Script - Hilfe gesucht.
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
Nur mal noch so aus Neugier: Wie groß ist das "Netzwerk", um das es hier geht? -
VB Script - Hilfe gesucht.
BOfH_666 antwortete auf ein Thema von Pikus1234 in: Windows Forum — Scripting
Na wer denn sonst? Soll sich der Domain-Admin oder Enterprise-Admin um die Clients kümmern? ;) Bei uns heißt die Gruppe "WorkstationAdmins"