-
Gesamte Inhalte
312 -
Registriert seit
-
Letzter Besuch
Alle erstellten Inhalte von mamamia
-
Datei auslesen und in Variable schreiben
mamamia antwortete auf ein Thema von basstscho in: Windows Forum — Scripting
Hi, hier mal mit Powershell: $Nummer = Get-Content -Path call.txt | Select-Object -First 1 Invoke-Command "C:\Tool\Tool.exe /number $Nummer" und hier nochmal vereinfacht Invoke-Command "C:\Tool\Tool.exe /number $(Get-Content -Path call.txt | Select-Object -First 1)" -
Skript zur Mail-Sortierung (Mails verschieben)
mamamia antwortete auf ein Thema von looka in: Windows Forum — Scripting
Also wenn du einen logischen Algorithmus "erfinden" kannst, dann lässt sich sowas sicherlich abbilden. Allerdings läuft so ein Script immer nur zyklisch ab, du kannst einkommende Mails also nicht direkt ansprechen und bearbeiten. Mit Powershell kannst du wie folgt ein Postfach ansprechen: $outlook = new-object -com Outlook.Application $namespace = $outlook.GetNamespace("MAPI") $inbox = $outlook.Session.GetDefaultFolder(6) An die Mails kommst du dann so ran: $Items = $objFolder.Items foreach ($Item in $Items) { } In das foreach müssten jetzt deine Filter platziert werden, damit die Mails verschoben werden können. Aber möglicherweise macht es hier mehr Sinn, sich von Outlook zu verabschieden und in Richtung eines Ticketsystems zu gehen oder ähnliches. -
PS: Homeordner durchlaufen und auflisten ob Owner noch existent
mamamia antwortete auf ein Thema von maeck in: Windows Forum — Scripting
Hört man gerne ;) -
PS: Homeordner durchlaufen und auflisten ob Owner noch existent
mamamia antwortete auf ein Thema von maeck in: Windows Forum — Scripting
Get-ChildItem \\Server\Freigabe\Ordner | Get-Acl | Where-Object { $_.accesstostring -like "S-1-5-21*" } Viel Spaß ;) -
Script zur Abfrage des Windows Update Status auf Servern
mamamia antwortete auf ein Thema von mamamia in: Windows Forum — Scripting
Das Script: # Region Description # # Name: checkServerUpdateState # Author: Markus Frank # Version: 0.2 { $_ -Like '*Reboot Pending*' -or $_ -Like '*RebootRequired=1*' } hinzugefügt, um DC´s abzufragen # 0.1 initiale Version # Description: prüft auf allen Servern den Stand der Windows Updates # # EndRegion Add-PSSnapin *Quest* Clear $sendmail = $true $BodyHeader = "Folgende Server sind noch nicht geupdated bzw neugestartet:`r`r" $Body = "" $allServer = 0 # definieren der Server $Server = Get-QADComputer -SearchRoot 'OU=Domain Controllers,DC=domain,DC=local' -Name "DE-DC*" $Server = $Server + (Get-QADComputer -SearchRoot 'OU=DE,OU=Luetze Group,DC=domain,DC=local' -OSName "*Windows Server*") # start der Abfrage $Server | Sort-Object Name | Group-Object managedby | ForEach-Object { if ($_.Name) { $Name = (Get-QADObject $_.Name).displayname $email = (Get-QADObject $_.Name).email } else { $Name = "ohne Zuordnung" } $BodyOwner = "$Name`r" $ServerCount = 0 $_.Group | ForEach-Object { #prüfen ob Host erreichbar ist if (Test-Connection -ComputerName $_.Name -Quiet -Count 1) { # Anzahl Updates ermitteln $strcomputer = $_.Name $WSUSLog_Reboot_Time = "" $WSUSLog_Reboot_Time = "" # letzte Zeile Pending Reboot auslesen $path1 = "\\$strComputer\c$\windows\windowsupdate.log" $WSUSLog_Reboot = Get-Content $Path1 -Encoding UTF8 | Where-Object { $_ -Like '*Reboot Pending*' -or $_ -Like '*RebootRequired=1*' } | Select -Last 1 $WSUSLog_Reboot = $WSUSLog_Reboot.Split("`t") $WSUSLog_Reboot_Time = $WSUSLog_Reboot[0]+" "+$WSUSLog_Reboot[1].Substring(0,8) $WSUSLog_Reboot_Time = Get-Date $WSUSLog_Reboot_Time # letzte Zeile Updates detected auslesen $WSUSLog_Updates = Get-Content $Path1 -Encoding UTF8 | Where-Object { $_ -Like '*updates detected*' } | Select -Last 1 $WSUSLog_Updates = $WSUSLog_Updates.Split("`t") $WSUSLog_Updates_Time = $WSUSLog_Updates[0]+" "+$WSUSLog_Updates[1].Substring(0,8) $WSUSLog_Updates_Time = Get-Date $WSUSLog_Updates_Time # Datum vergleichen if ($WSUSLog_Reboot_Time -ge $WSUSLog_Updates_Time) { $BodyOwner = $BodyOwner + " " + $_.Name + "`t" + $_.description + " | muss neugestartet werden`r" $ServerCount++ $allServer++ } else { $WSUSLog_Updates = $WSUSLog_Updates[5].Split(" ") # wenn mehr als 0 Updates anstehen, ausgeben if ($WSUSLog_Updates[3] -gt 0) { $BodyOwner = $BodyOwner + " " + $_.Name + "`t" + $_.description + " | " + $WSUSLog_Updates[3] + " neue(s) Update(s) anstehend`r" $ServerCount++ $allServer++ } } } } # Zusammenfassung senden, für einzelne User if (($sendmail) -and ($ServerCount -gt 0)) { Send-MailMessage -From "WSUS Computer Status<wsusstatus@domain.local>" -To "email@domain.local" ` -Subject "aktueller Stand Windows Updates Server $Name" ` -Body "$BodyHeader$BodyOwner" -SmtpServer "smtp.domain.local" } if ($ServerCount -gt 0) { $Body = $Body + $BodyOwner + "`r" } } # Zusammenfassung senden für alle User und Server if (($sendmail) -and ($allServer -gt 0)) { Send-MailMessage -From "WSUS Computer Status<wsusstatus@domain.local>" -To "email@domain.local" ` -Subject "aktueller ServerStatus Windows Updates" ` -Body "$BodyHeader$Body" -SmtpServer "smtp.domain.local" } else { Write-Host $BodyHeader$Body } -
Script zur Abfrage des Windows Update Status auf Servern
mamamia hat einem Thema erstellt in: Windows Forum — Scripting
Hallo Board, ich stand vor dem Problem, mir eine Übersicht zu verschaffen, welcher Server gerade welchen Updatestatus hat. Es ist so, dass nach dem Freigeben der Updates man in einer großen Farm und mit mehreren Admins die Übersicht verliert, auf welchem Server noch Interaktionen zu tätigen sind (Updates installieren, Neustarten, Nacharbeiten, oder eben nix). Es ist bei uns so, dass Updates mit einem Monat Verzögerung ausgerollt werden und auf den Servern manuell installiert werden müssen. Daher kann mir die WSUS Konsole keine genauen Daten liefern. Ich habe mir also ein Script geschrieben, welches die \windowsupdate.log auf den Servern parst und mir dann alles detailliert ausgibt oder eine eMail versendet. Zudem wurden den Computerobjekten noch Besitzer (die jeweiligen Admins) zugewiesen, damit jeder über seine Server informiert ist. Es geht aber auch ohne! Benötigt werden die ActiveRoles von Quest (PowerShell Commands (CMDLETs) for Active Directory by Quest Software) Die Ausgabe sieht wie folgt aus: Folgende Server sind noch nicht geupdated bzw neugestartet: Admin A ServerA01 11 neue(s) Update(s) anstehend ServerA02 10 neue(s) Update(s) anstehend ServerA03 13 neue(s) Update(s) anstehend ServerA04 muss neugestartet werden Admin B ServerB01 11 neue(s) Update(s) anstehend ServerB02 10 neue(s) Update(s) anstehend ServerB03 13 neue(s) Update(s) anstehend ServerB04 muss neugestartet werden Wir haben es noch mit einem geplanten Task verknüpft und bekommen so eine aktuelle Übersicht des Updatestatus per eMail. Vielleicht kann es ja jemand gebrauchen. Gegen ein bisschen Feedback hätte ich nix einzuwenden ;) -
VBS Remote geöffnete Dateien vom Server anzeigen lassen
mamamia antwortete auf ein Thema von schmitty in: Windows Forum — Scripting
Servus, das fällt mir spontan noch ein: Openfiles Ins blaue: Denke damit kannst du dir eine Liste ausgeben lassen und mit den entsprechenden Rechten kannst du diese auch schließen. Schau dir das mal an. -
VBS Remote geöffnete Dateien vom Server anzeigen lassen
mamamia antwortete auf ein Thema von schmitty in: Windows Forum — Scripting
Versteh ich richtig, dass die User die Datei aufrufen sollen? Finde ich keinen sonderlich guten Ansatz, die verstehen doch nicht, was Sie da tun. Du müsstest ja auch noch nach dem Dateinamen filtern, sonst bekommt der User ja alle Files die gesperrt sind angezeigt. Ich vermute schon, dass der Prozess lokale Adminrechte benötigt. Zudem fehlt das WScript.Quit am Ende! -
Batch um alle Ordner außer die mit dem Namen xxx zu löschen?
mamamia antwortete auf ein Thema von angoletti1 in: Windows Forum — Scripting
Hi Chris, warum tust du es dann nicht mit PS? Get-ChildItem -Path C:\temp -Exclude "1","2" | Remove-Item -
VBScript Hyperlink formatieren
mamamia antwortete auf ein Thema von speedyfurious in: Windows Forum — Scripting
Servus, ich nehm an, du schreibst eine html-Datei die dann in den Signature Ordner wandert, oder? Warum schreibst du nicht einfach Klartext in die Datei <a href=""></a> und so? -
Servus, ich geb hier mal meine Version davon zum besten! ' Region Description ' ' Name: deployFonts.vbs ' Author: mamamia ' Version: 0.3 ' Description: kopiert Fonts von $Fontspath zu den Systemfonts ' ' ' EndRegion Set objNetwork = CreateObject("WScript.Network") Set objShellApp = CreateObject("Shell.Application") Set WSHShell = CreateObject("WScript.Shell") Set oFileSys = CreateObject("Scripting.FileSystemObject") Computer = UCase(objNetwork.ComputerName) Function deplyFonts (FontsPath) Set objFolder = objShellApp.Namespace(FontsPath) SystemFonts = WSHShell.ExpandEnvironmentStrings("%Systemroot%") & "\Fonts\" Set Folder = oFileSys.GetFolder(FontsPath) For Each File In objFolder.Items ' Nur Files mit der Endung "ttf" lesen If UCase(Right(File.Path, 3)) = "TTF" Then ' wenn Font auf dem System noch nicht vorhanden ist, kopieren If Not oFileSys.FileExists(SystemFonts & File.Name & ".TTF") Then objShellApp.Namespace(SystemFonts).CopyHere File Else 'prüfen ob eine neuere Version auf dem Server liegt Set DestFile = oFileSys.GetFile(File.Path) Set SourceFile = oFileSys.GetFile(SystemFonts & File.Name & ".TTF") If SourceFile.DateCreated <> DestFile.DateCreated Then oFileSys.CopyFile File.Path, SystemFonts, vbTrue End If End If End If Next End Function deplyFonts("\\pfad\zu\den\Fonts") - es wird geprüft ob die Schriften schon auf dem System vorhanden sind - bei vorhanden sein, wird auf eine mögliche neue Version geprüft (Update der Fonts)
-
probier mal: Get-ADUser -Filter * -Properties * | Select-object { $_.SamAccountName,$_.PrimaryGroup,[string]$_.MemberOf} | Export-CSV "C:\Alle Benutzer.txt"
-
Netzwerkdrucker installation mit ADS Gruppen, WSH und Powershell
mamamia antwortete auf ein Thema von mamamia in: Windows Forum — Scripting
Hier die Powershelllösung: # Region Description # # Name: mapNetworkprinter # Author: mamamia # Version: 0.1 # Description: Netzwerkdrucker werden gemäß Gruppenzugehörigkeit gemappt # # EndRegion Add-PSSnapin *Quest* $net = new-Object -com WScript.Network Get-QADMemberOf $ENV:USERNAME -Indirect -Name 'DE-P*' | foreach {$net.AddWindowsPrinterConnection("\\Printserver\"+$_.Name)} Das PS-Script ist noch in der Entwicklung ;) Ich finde, dass ist auch ein recht ansehnlicher Vergleich, zwischen Powershell und WSH, wie viel einfacher hier doch einiges ist! Auf die Prüfung von vorhanden sein der Drucker habe ich verzichtet, da die Funktionen dies selber tun. Sollte ein Netzwerkdrucker gemappt sein, dann wird dieser übersprungen. -
Netzwerkdrucker installation mit ADS Gruppen, WSH und Powershell
mamamia hat einem Thema erstellt in: Windows Forum — Scripting
Servus, gleich eins vorweg, ich weiss im 2k8R2 gehts auch über GPO´s ;) Möchte hier aber mal meine Lösungen für alle anderen Vorstellen. Vorraussetzungen: Powershell 2.0 (+Quest CMDLETs), WSH, AD Gruppen für die Druckerzuordnung Die AD Gruppen werden wie die Drucker benannt, User oder Abteilungsgruppen dann den Druckergruppen hinzugefügt: Drucker-Gruppen-Namen: DE-P-IT-001 DE-P-IT-002 DE-P-IT-003 ... Beim Anmelden wird dann geprüft, in welcher Gruppe der User direkt oder indirekt (Group nesting) Mitglied ist. Hier die WSH Lösung: ' Region Description ' ' Name: performPrinterInstallation ' Author: mamamia ' Version: 0.4 ' 0.4 | Anpassung an neue Firma ' 0.3 | Gruppenzugehörigkeit in eigenes Array verlagert ' 0.2 | Multidomänfahig gemacht ' 0.1 | Grundscript ' Description: Verteilt Drucker anhand von Zugehörigkeit einer Druckergruppe ' ' ' EndRegion Set objNetwork = CreateObject("WScript.Network") Set WSHShell = CreateObject("WScript.Shell") Set oFileSys = CreateObject("Scripting.FileSystemObject") Set objcon = CreateObject("ADODB.Connection") name = WSHShell.ExpandEnvironmentStrings("%USERNAME%") PrintServer = "\\Printserver\" Domain = objNetwork.UserDomain Dim strLDAPQuery Dim objcon strPrinterOU = "<LDAP://OU der Drucker>;(&(objectClass=group)); distinguishedName,name;subtree" ' Falls Variablen nicht gesetzt wurden, Script beenden If strLDAPQuery = "" Or strPrinterOU = "" Then WScript.Quit End If On Error Resume Next ' Userobjekt deklarieren um auf Attribute zugreifen zu können objcon.Open "Provider=ADSDSOObject" Set rs = objcon.Execute(strLDAPQuery) Set objUser = GetObject(rs("adspath")) If Err.number <> 0 Then WScript.Quit End If On Error Goto 0 Dim UserGroups() If IsArray(objUser.memberOf) = 0 Then ReDim UserGroups(1) UserGroups(0) = objUser.memberOf Else ReDim UserGroups(UBound(objUser.memberOf)) I = 0 For Each Group In objUser.memberOf UserGroups(I) = Group I = I + 1 Next End If ' OU Auslesen um Drucker Gruppen zu ermitteln Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objcon objCommand.CommandText = strPrinterOU Set objRecordSet = objCommand.Execute ' Prüfen ob User in einer DruckerGruppe ist oder eine Gruppe in der DruckerGruppe in der der User Mitglied ist ' Bsp1: User direkt in Gruppe DE-P-IT-001 ' Bsp2: User in der Gruppe DE-DG-IT; DE-DG-IT Mitglied der Gruppe DE-P-IT-001 While Not objRecordSet.EOF Set objGroup = GetObject ("LDAP://" & objRecordSet.Fields("distinguishedName")) objGroup.GetInfo ' wenn User keine Gruppenmitgliedschaft hat On Error Resume Next arrMembersOf = objGroup.GetEx("member") ' wenn DruckerGruppe keine Mitglieder enthält gibt es einen Runtimeerror, der wird hier abgefangen FehlerCode = Err.number On Error Goto 0 If Not FehlerCode <> 0 Then For Each Group In UserGroups If Group = objRecordSet.Fields("distinguishedName") Then ' Wenn User in einer PrinterGruppe installPrinter objRecordSet.Fields("name") gefunden = True End If Next If gefunden = False Then For Each strMemberOf In arrMembersOf For Each Group In UserGroups If Group = strMemberOf Then ' Wenn eine Gruppe in der der User ist Mitglied ist installPrinter objRecordSet.Fields("name") End If Next Next End If End If gefunden = False objRecordSet.MoveNext Wend objcon.Close WScript.Quit Function installPrinter (PrinterName) Err.Clear On Error Resume Next objNetwork.AddWindowsPrinterConnection PrintServer & PrinterName FehlerNr = Err.number Fehler = Err.Description On Error Goto 0 Select Case FehlerNr Case "-2147023095" Fehler = "Gruppe in AD entspricht nicht dem Druckernamen. Schreibweise prüfen!" End Select End Function -
VBS script Frage zum kopieren und installieren von Fonts
mamamia antwortete auf ein Thema von m1k2k in: Windows Forum — Scripting
Hier mein Script dazu: ' Region Description ' ' Name: deployFonts.vbs ' Author: mamamia ' Version: 0.2 ' 0.2 | Registrierung der Schriftarten hinzugefügt ' Description: kopiert Fonts von $Fontspath zu den Systemfonts ' ' ' EndRegion Set objNetwork = CreateObject("WScript.Network") Set objShellApp = CreateObject("Shell.Application") Set WSHShell = CreateObject("WScript.Shell") Set oFileSys = CreateObject("Scripting.FileSystemObject") Computer = UCase(objNetwork.ComputerName) Function deplyFonts (FontsPath) Set objFolder = objShellApp.Namespace(FontsPath) SystemFonts = WSHShell.ExpandEnvironmentStrings("%Systemroot%") & "\Fonts\" Set Folder = oFileSys.GetFolder(FontsPath) For Each File In objFolder.Items ' Nur Files mit der Endung "ttf" lesen If UCase(Right(File.Path, 3)) = "TTF" Then ' wenn Font auf dem System noch nicht vorhanden ist, kopieren If Not oFileSys.FileExists(SystemFonts & File.Name) Then oFileSys.CopyFile File.Path, SystemFonts, True ' Schriftart registriern, damit diese von Programmen gefunden wird If (objFolder.GetDetailsOf(File, 21) <> "") Then WSHShell.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts" & objFolder.GetDetailsOf(File, 21), UCase(File.Name), "REG_SZ" Else WSHShell.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts" & File.Name, UCase(File.Name), "REG_SZ" End If 'prüfen ob eine neuere Version auf dem Server liegt Else Set DestFile = oFileSys.GetFile(File.Path) Set SourceFile = oFileSys.GetFile(SystemFonts & File.Name) If SourceFile.DateCreated <> DestFile.DateCreated Then oFileSys.CopyFile File.Path, SystemFonts, True ' Schriftart registriern, damit diese von Programmen gefunden wird If (objFolder.GetDetailsOf(File, 21) <> "") Then WSHShell.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts" & objFolder.GetDetailsOf(File, 21), UCase(File.Name), "REG_SZ" Else WSHShell.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts" & File.Name, UCase(File.Name), "REG_SZ" End If End If End If End If Next End Function ' Allgemeine Fonts für Alle installieren deplyFonts("\\PFAD\Fonts\ALLE") ' Fonts für KE und MA installieren (wenn KE oder MA im Rechnernamen vorhanden) If (InStr(Computer, "KE") Or InStr(Computer, "MA")) Then deplyFonts("\\PFAD\Fonts\KE") End If WScript.Quit Fonts werden geprüft ob Sie installiert sind, wenn nicht, werden diese kopiert und in der Registry registriert und wenn eine neuere Version des Fonts vorhanden ist, dann wird dieser aktualisiert. Zudem Möglichkeit für differenzierte Verteilung nach Kriterien! Viel Spass damit! -
Hallo, wir wollen unsere Konferenzräume freigeben, damit man sieht, wer wann welchen Raum gebucht hat. Mehr aber auch nicht. Wenn wir jetzt unter Kalenderberechtigungen den Standard auf Stufe 2 berechtigen, dann können alle User den Termin öffnen und sehen wer mit wem einen Termin (Termin öffnen >> Terminplanungsassisten) hat. Das ist sehr ungünstig. Nehmen wir als Beispiel Personalgespräch. Wenn da jetzt der Abteilungsleiter + ein MA drin stehen und das kann jeder lesen, dann ist das sehr schlecht. Kann man es so einstellen, dass die User nur die Kalenderübersicht sehen, aber den Termin nicht öffnen können?
-
Powershell: bestimmte Gruppen im Userobjekt löschen
mamamia antwortete auf ein Thema von mamamia in: Windows Forum — Scripting
Iss ja ganz einfach Get-QADMemberOf $User -Indirect -Name 'DE-EXDG*' | foreach {Remove-QADMemberOf $User -Group $_.DN} Es kommt Licht ins dunkel. -
Powershell: bestimmte Gruppen im Userobjekt löschen
mamamia hat einem Thema erstellt in: Windows Forum — Scripting
Hi Leute, habe ne kleine PS-Frage. Ich möchte bestimmte Gruppen für ein Userobjekt entfernen, bzw den User aus den Gruppen entfernen. Habe dazu folgendes gemacht Get-QADMemberOf $User -Indirect -Name 'DE-EXDG*' | ft DN Damit bekomm ich die Gruppen, die ich brauch. Jetzt möchte ich gleich am besten mittels Pipe den User aus der Gruppe entfernen. Logisch würde ich das so irgendwie machen: Get-QADMemberOf $User -Indirect -Name 'DE-EXDG*' | ft DN | Remove-QADMemberOf $User -Group $_ Sodass quasi das Ergebnis übergeben wird. Funktioniert allerdings leider nicht. Hoffentlich ist mein Denkfehler nicht zu derb ;) Wie macht man sowas am elegantesten? Danke im voraus! -
Prometric Anmeldung
mamamia antwortete auf ein Thema von delta0211 in: MS Zertifizierungen — Allgemein
Warum ist das so schlimm?? Ist doch am Ende egal, wem du dein Geld in den Rachen schiebst! Ich zahl das immer mit Kreditkarte und gut iss.. Gebucht - Bezahlt - Bestanden ;) -
Musst beiden bestehen. Es wird dir aber alles erst zum Schluss gezeigt. Haste nen bisschen Nervenkitzel ;)
-
Das iss ne Kombinationsprüfung. Baut sich folgendermaßen zusammen: 70-640: TS: Windows Server 2008 Active Directory, Konfigurieren • Konfigurieren der Serverfunktionen (30 Prozent) • Verwalten der Active Directory-Umgebung (32 Prozent) • Konfigurieren der Active Directory-Infrastruktur (38 Prozent) 70-642: TS: Windows Server 2008 Netzwerkinfrastruktur, Konfigurieren • Konfigurieren des Netzwerkzugriffs (49 Prozent) • Bereitstellen von Servern (51 Prozent) Die 70-648 = 70-642 + 70-640 Das ganze dann in 2 Teilen. Einer mit 27 und einer mit 30(?) Fragen. Weiss nicht mehr genau.
-
Exambezeichnungen bei New Horizon
mamamia antwortete auf ein Thema von mado1 in: MS Zertifizierungen — Allgemein
Huch, recht haste. Bei Pearson Vue geht das nicht mehr. Hier siehste doch die Windows Zertifizierungen: Microsoft Windows Server 2008 Courses and Classes, Windows Server 2008 Training - New Horizons Computer Learning Centers -
Exambezeichnungen bei New Horizon
mamamia antwortete auf ein Thema von mado1 in: MS Zertifizierungen — Allgemein
Kannst du nicht, geht nur noch bei Prometric Services: Testing and Assessment -
Soo, habs heute auch geschafft. Hatte voll viele Fragen zu PKI, EAP, IPSec im ersten Teil. Im zweiten Teil gings dann relativ normal zur Sache, WSUS, DNS, DHCP, Gesamtstrukturen. Weiter gehts zum MCITP :: SA :)
-
Naja eins nach dem anderen. Ich bin dann erstmal wieder auf Stand.