Jump to content

ibicis

Members
  • Gesamte Inhalte

    79
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von ibicis

  1. Hallo, ich habe eine Stamm-CA installiert auf einem Server 2008 R2, weil ich Zert. für TS-Sitzungen benötige. Ich ging laut dieser Webseite vor: http://www.msxfaq.de/signcrypt/setupca2008.htm Im Stamm-Zert. gibt es einen Hinweis – es ist kein Pfad zur CRL eingetragen, siehe Bild. Auch kann ich nur folgende Zert. anfordern, für alle anderen fehlt mir die Berechtigung: Domänencontroller, Domänencontrollerauthentifizierung und Verz.-E-Mail-Replikation Eine Erklärung für das Verhalten habe ich nicht, ebenso wenig weiß ich, wie der CRL verfügbar gemacht werden kann. Ich zog bereits ein Server 2012 Handbuch zu Rate, aber die beschriebenen Details werden nicht aufgeführt. Gibt es einen Workaround für dieses Problem? Vielen Dank vorab.
  2. Der erste Vorschlag ist viel praktischer und tut genau das, was er soll. Auf die Idee des Auskommentierens hätte ich auch allein durch probieren kommen können, aber ich tat es nunmal nicht. Insofern: :thumb1:
  3. Vielen Dank für den Tipp. Einfaches aneinanderreihen funktioniert unproblematisch, auch ""Heute ist " + $date" ist nachvollziehbar, aber "$date + " Uhr"" funktioniert offenbar nicht:
  4. Auch gut, aber ich bevorzuge die Schreibweise der Ergebnisse untereinander, ich finde es übersichtlicher (das ist aber Geschmackssache). Eine andere Frage: Wie kann ich bei einer Ausgabe einen String an eine Zeile ohne Zeilenumbruch anfügen? Bsp., ich gebe Datum und Uhrzeit aus, Dienstag, 12. Februar 2013 16:05:54 möchte aber den String "Uhr" (ohne") an die Ausgabe hängen. Dienstag, 12. Februar 2013 16:05:54 Uhr Ich frage nicht nach Formatierungen a la "-Format u" etc., denn die Standardformatierung genügt mir. Es geht mir prinzipiell um das Anhängen von Strings an eine Ausgabe, ohne in die nächste Zeile umzubrechen. Get-Date ist nur ein Bsp., ich suche generell nach einer Möglichkeit, sowas zu bewerkstelligen. Danke vorab.
  5. Ja, so passt es. Die Ausgabe ist nicht schön, aber praktisch. ;) Wenn ich das Ergebnis mit notepad öffne und je ein Leerzeichen durch keinen Character ersetze, passt die Formatierung. Insofern - tausend Dank für deine Hilfe (nicht nur insofern, sondern überhaupt). Generell ist PS relativ übersichtlich und man kann sich einarbeiten. Nur wenn es um Formatierungen geht, artet alles recht schnell in ein Script-Monster aus, welches schwer durchschaubar wird.
  6. Die Richtung stimmt, nun werden zumindest alle Hosts, die im Array definiert wurden, ausgegeben. Wie kann ich nun obige Ausgabe "\\netzwerk-client3\c$\Windows\system.ini" wave=mmdrv.dll erreichen? Mit { "\\" + $computer + "\c$\Windows\system.ini" | Out-File $ausgabe -Encoding Default -append Get-Content "\\" + $computer + "\c$\Windows\system.ini" | select-string -pattern "wave=" -context 0, 0 | Out-File $ausgabe -Encoding Default -append } geht es nicht. Bzgl. PS-Syntax sieht es bei mir recht mau aus. Ist es generell mgl., die Computer und das Ergebnis von select-string untereinander auszugeben?
  7. Ich bin mir nicht sicher, ob meine Beschreibung im Titel korrekt ist, deshalb hier nochmal ausführlicher, was ich meine: Ich frage folgendes ab für mehrere Clients im Netzwerk: $ausgabe = "\\localhost\ausgabe.txt" "\\netzwerk-client3\c$\Windows\system.ini" | Out-File $ausgabe -Encoding Default -append Get-Content "\\netzwerk-client3\c$\Windows\system.ini" | select-string -pattern "wave=" -context 0, 0 | Out-File $ausgabe -Encoding Default -append Die Abfrage funktioniert, gibt aber nur die gefundenen Strings aus; der Host-Name, auf dem die Strings gefunden wurden, wird nicht ausgegeben (so wurde es ja in der Abfrage auch definiert): wave=mmdrv.dll Ich möchte gerne, dass der Host-Name mit ausgegeben wird, weshalb ich den String "\\netzwerk-client3\c$\Windows\system.ini" aus Zeile 3 einfach als Ausgabe für Zeile 2 kopierte und einfügte. Die Ausgabe schaut nun so aus: "\\netzwerk-client3\c$\Windows\system.ini" wave=mmdrv.dll Nun zur eigentlichen Frage: Kann ich entweder definieren, dass PS den "hostname" des Ziel-PCs ermittelt und ausgibt (Wenn ja, wie mache ich das?) bzw. wie kann ich PS anweisen, den String, der mit "Get-Content "\\netzwerk-client3\c$\Windows\system.ini"" verknüpft ist, über eine Variable oder eine Anweisung in Zeile 2 oder nach Zeile 3 auszugeben?
  8. Danke für deine Antwort, das sagt mir momentan nicht sehr viel, da ich nicht weiß, wie ich diese Option wo einbinden muss. Hast du ein Bsp., wie ich das syntaktisch einbinden kann? Ich habe mir hier aus dem Forum ein Bsp.-Script geholt, welches ich auf diesem Weg umbog: $path="\\netzwerk-pc\C$\Dokumente und Einstellungen\*" Get-ChildItem $path -name "NTUSER.DAT" -recurse -force $MonateAlt=(Get-Date).AddMonths(-3) $DateiAlter=$MonateAlt # Zuweisung, die benutzt wird # Ab hier nichts mehr ändern Foreach ($item in (dir –recurse $path)) { If (!( $item.PSIsContainer)) { If ($item.LastWriteTime –lt $DateiAlter) { Write-output "$($item.FullName), $($item.LastWriteTime), $($item.Length)" } } } Die Ausgabe schaut nun folgendermaßen aus (genau so möchte ich es eben nicht haben):
  9. Ich möchte auf XP-Clients nach verwaisten Userprofilen suchen, also dachte ich, dass ich jeweils nach der Datei "NTUSER.DAT" unter "C:\Dokumente und ..." suche und als verwaist deklariere, was älter ist als 3 Monate. Da forfiles leider kein UNC unterstützt, musste ps (Powershell) herhalten, mit Get-ChildItem komme ich weiter, aber es läuft nicht nach Wunsch. Hier die Syntax, die alle "NTUSER.DAT" ausgeben soll: Get-ChildItem "\\netzwerk-pc\C$\Dokumente und Einstellungen\*" -name "NTUSER.DAT" -recurse -force | ? { ($_.LastAccessTime -lt (Get-Date).AddMonths(-3)) } | out-file "\\netzwerk-pc1\c$\Dokumente und Einstellungen\Administrator\Desktop\ntuser-dat.txt" Was mir nun ausgegeben wird sind zwar "NTUSER.DAT"-Namen, aber egal, was ich als Datumsfilter (AddMonths, AddDays, AddYears) einsetze, es bleibt immer bei derselben Auflistung. Syntaxfehler wirft ps nicht, aber irgendwie greift die Filterung nicht oder falsch. Was läuft da verkehrt? Außerdem hätte ich gern, dass das Datum der letzten Veränderung mit ausgegeben wird (aktuell listet ps nur die Dateinamen unereinander ohne weiteren Kontext auf), wie stelle ich das an (wenn mgl. mit Syntax-Bsp. im Code)? Danke vorab.
  10. Ich kille mit einer Batch einen Prozess und gebe das Ergebnis als txt aus, bspw. taskkill /IM notepad.exe /F /T > D:\taskkill-log.txt. Wird der Prozess notepad.exe gefunden, funktioniert die Ausgabe und in die Datei wird ERFOLGREICH: Der Prozess mit PID 9416 (untergeordnetem Prozess von PID 2732) wurde beendet. geschrieben. Wird Notepad aber z.B. nicht gefunden, landet leider nichts in der Log-Datei, die Meldung FEHLER: Der Prozess "notepad.exe" wurde nicht gefunden. wird direkt im CMD-Fenster ausgegeben. Kann ich taskkill dazu bringen, alle Ausgaben in die txt zu schreiben und wie stelle ich das syntaktisch an? Die Suchmaschine aller Suchmaschinen lieferte mir dazu bislang leider nichts. Danke vorab.
  11. Würde der gesamte Befehl dann etwa so ausschauen? $ausgabe = "d:\data\a-powershell-ausgabe.txt" select-string -path *.txt -pattern "Laufwerk inventarisieren" -context 1, 10 > a-powershell-ausgabe.txt foreach ($item in $ausgabe) { $text = "$($result.Context.PostContext[3].Substring(3))" $text } (Get-Content $ausgabe | Select-Object -Last 7) | Set-Content $ausgabe Irgendwie klappt es so nicht. Die Ausgabe ist nun wieder genauso groß wie ohne die Filterung "Select-Object -Last 7". Was mache ich falsch? Die Ausgabe kommt folgendermaßen formatiert an: Es müssten die ersten 33 Characters jeder Zeile gekürzt werden.
  12. Gibt es noch eine Mgl., die ersten xx Characters aus jeder Zeile zu entfernen? Danach suche ich in der PS-Hilfe vergeblich.
  13. Mit select-string -path *.txt -pattern "Laufwerk inventarisieren" -context 1, 10 > inventarisieren-ausgabe.txt erreiche ich, dass alle txt-Dateien mit dem übereinstimmmenden String aufgelistet werden. So weit, so gut. Wenn ich nun PS anweisen kann, alle Zeilen der Ausgabe, mit Ausnahme der letzten 7 Zeilen, zu löschen, bräuchte ich nicht nach Datum filtern, da die benötigten Infos immer ganz unten in den 7 letzten Zeilen stehen. Kann mir evtl. jemand sagen, wie ich das erreiche? Danke vorab. Das geht so: $ausgabe = "d:\data\a-powershell-ausgabe.txt" select-string -path *.txt -pattern "Laufwerk inventarisieren" -context 1, 10 > a-powershell-ausgabe.txt (Get-Content $ausgabe | Select-Object -Last 7) | Set-Content $ausgabe
  14. Ich hatte gestern im Windows Eventviewer nach einem Backup Exec (BE) Reiter gesucht, fand aber auf dem betreffenden Server nichts dergleichen. Die Events, die von BE in "Application" geschrieben werden, beziehen sich nicht auf die Inventarisierung.
  15. Danke für die erste konstruktive Bemerkung hier.Ich habe wenig Erfahrung mit PS, gestern probierte ich noch mit select-string herum, bekam es aber nicht hin, bei einem Treffer den kompletten Inhalt einer Datei zu extrahieren und Dateien einzulesen, die das Datum des aktuellen Tages haben (egal, ob an dem Tag erstellt oder das Datum als String in der Datei). Stets wurden immer alle Dateien ausgelesen, die den entsprechenden String beinhalten. Mit get-date kann ich mir zwar das aktuelle Datum ausgeben lassen, aber wie suche ich nach einem String, der gleich dem aktuellen Datum ist, ohne dass ich dieses explizit angeben muss. Es müsste also nach einer Variable gesucht werden, was ich nicht hinbekomme. Mit select-string könnte ich z.B. nach "Auftragsname : Laufwerk inventarisieren" in einer Datei suchen, die das aktuelle Datum beinhaltet oder das Änderungsdatum des aktuellen Tages aufweist und PS anweisen, bei beiden Übereinstimmungen den kompletten Inhalt der Datei auszugeben.
  16. Hallo, ist es mgl., mit find.exe (findstr ist leider nicht mgl., da das Zeichenformat in den txt-Dateien Unicode ist) in einer Datei nach mehreren Strings zu suchen und den Inhalt der enthaltenden Dateien komplett in eine Datei zu exportieren? Konkret geht es um die Log-Dateien, die von Backup Exec erzeugt werden. Eine Log-Datei hat bspw. diesen Aufbau: Mein Anliegen ist eigentlich simpel: Wird in allen Log-Dateien, die im Verzeichnis "Data" unterhalb des Installationspfades liegen, das aktuelle Datum (das geht mit der Variable "%date%") sowie der String "Laufwerk inventarisieren" gefunden, so soll deren kompletter Inhalt in eine Datei geschrieben werden, die ich dann mittels Script als E-Mail verschicke. Find.exe kann aber nur nach 1 String suchen, man müsste also die Suche verknüpfen, sodass nach "%date%" und "Laufwerk inventarisieren" gesucht wird. Außerdem müsste man find.exe anweisen, bei positivem Treffer den kompletten Inhalt einer Datei auszulesen, nicht nur die Trefferzeile. Geht das so überhaupt oder bin ich mit meiner Idee total auf dem Holzweg? Falls letztes zutrifft, wie kann ich mein Anliegen trotzdem realisieren? Danke vorab.
  17. Danke sehr, das Problem lag in einem Verständnisproblem bzgl. Win XP-Capture inkl. Sysprep und Win 7-Capture x64, welches ein etwas anderes Vorgehen verlangt. Ich muss da einarbeiten...
  18. Meines Wissens beginnt das Sysprep, nachdem ich die Aufzeichnung startete. So weit kommt es jedoch nicht, da keine Partition auf der Maschine gefunden wurde, die ein OS enthält. Falls jedoch ein Missverständnis vorliegt, so erkläre doch bitte kurz, was du meintest. Ich habe mit WDS nur wenige Erfahrungen.
  19. Hier läuft ein WDS auf einem W2K8 R2 x64. Das Capturen von Win 7 x86-Clients ist möglich, unter dem Reiter "Boot Images" ist "Capture Boot Image x86" auf dem WDS-Server bereits aktiviert. So weit ich weiß, wurde es bereits beim Setup angelegt. Nun möchte ich einen Win 7 x64-Client capturen. Wähle ich nach dessen Start und dem Kontakt zum WDS-Server das Menü "Capture Boot Image x86" aus, so komme ich bis zur Auswahl des aufzuzeichnenden Laufwerks, das Pulldown-Menü bleibt jedoch leer, es wird kein LW erkannt, das ein OS beinhaltet. Nun tue ich mich schwer, dem WDS beizubringen, ein x64-System zu capturen, diverse Tuts und Videos dazu sah ich im WWW bereits, doch wird dort stets nur ein Image aus einer Setup-DVD erzeugt, ich sah noch kein Tut, in dem eine Hardware-Maschine gecaptured wurde. Ist dies evtl. ob der 64 Bit-Architektur der Hardware gar nicht möglich? Ich mountete ein Win 7 x64-Image (Setup-DVD) und kann dort auch die "boot.wim" sowie die "install.wim" einbinden. Genügt dies, um nun eine 64 Bit-Maschine aufzeichnen zu können oder zerschieße ich mir damit letztendlich gegebenenfalls den WDS-Service? Darauf hätte ich nun gar keine Lust. Falls jemand mit dieser Konstellation Erfahrungen hat, so wäre ich für einen Wissensaustausch dankbar.
  20. Genau das war das Problem. Wollte mein Erstpost gerade editieren, da ich es durch probieren zufällig selbst gefunden hatte. Komisch nur, dass es unter den NT 5.x ohne Pfadangabe funktioniert bzw. komisch, dass es ab NT 6.x halt nicht mehr funktioniert.Danke trotzdem.
  21. Problem: Ein mit dem Taskplaner erstellter Task, der nach Bedarf bzw. Event eine CMD-Datei aufruft, wird unter Win 7/Server 2008 (NT 6.1/6.0) nicht erwartungsgemäß abgearbeitet. Dieselben Aktionen, die als Task unter Windows XP/Server 2003 (NT 5.1/5.2) definiert wurden, funktionieren unter den NT-Vorgängerversionen einwandfrei. Rufe ich die CMD manuell auf, wird sie unter Win 7/Server 2008 ebenfalls erwartungsgemäß ausgeführt, nur eben nicht als Task. Die CMD schreibt einige Daten in eine Textdatei, die dann mit einem Tool (Blat.exe) als Mail versendet werden. Die Logdatei des Mail-Tools gibt aus, dass Blat.exe keine Textdatei fand, was korrekt ist, da als Job leider keine erstellt wurde. Die Syntax des Tasks: <?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2011-11-29T11:08:34.6012057</Date> <Author>DOMAIN\administrator</Author> </RegistrationInfo> <Triggers /> <Principals> <Principal id="Author"> <UserId>DOMAIN\Administrator</UserId> <LogonType>Password</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <IdleSettings> <Duration>PT10M</Duration> <WaitTimeout>PT1H</WaitTimeout> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT1H</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>C:\temp\mail.cmd</Command> <Arguments>/profile /user:DOMAIN\administrator</Arguments> </Exec> </Actions> </Task> Die Syntax der CMD: echo Test-Mail > "mail-body.txt" echo Datum: %date% >> "mail-body.txt" echo Zeit: %time% >> "mail-body.txt" echo Computer: %computername% >> "mail-body.txt" echo Test-Mail1 >> "mail-body.txt" rem *E-Mail Versenden mittels "Blat"* cd /d "C:\temp" Blat -install server01.DOMAIN sysadmin@domain.de Blat "mail-body.txt" ^ -to user1@domain.de -server mail.domain.de -u sysadmin@domain.de -pw password ^ -debug -timestamp -log blatSMTPlog.txt ^ -subject "Test" Beide Dateien, sowohl die XML der Tasksyntax, als auch die CMD, liegen im ZIP-Anhang, falls jemand die Settings nachvollziehen mag. Wo liegt mein Denkfehler beim Konzept? Ich habe bereits alle (un)möglichen Settings im Task selbst ausprobiert, nichts funktionierte bisher. Danke vorab.
  22. Danke dir. Es ist eine Benutzeraktion die ausgeführt wird, wenn der Dienst mal hängt, was nicht so häufig vorkommt, deshalb ist ein Monitor (noch) nicht angebracht. Dummerweise kenne ich mich mit Powershell nicht aus, sodass ich diesbzgl. ziemlich auf dem Schlauch stehe.
  23. Zurzeit wird der Status von 2 Diensten ermittelt. Erst wenn beide Dienste laufen wird eine Erfolgsmail verschickt. Läuft nur einer von beiden Diensten geschieht nichts. Die Syntax: echo Der SQL-Server wurde an folgendem Tag zur folgenden Zeit auf folgendem Computer neugestartet: > "C:\scripts\SQL-restart\mail.txt" echo Datum: %date% >> "C:\scripts\SQL-restart\mail.txt" echo Zeit: %time% >> "C:\scripts\SQL-restart\mail.txt" echo Computer: %computername% >> "C:\scripts\SQL-restart\mail.txt" echo neugestartete Dienste: >> "C:\scripts\SQL-restart\mail.txt" pslist.exe /accepteula W3SQLMGR | findstr /B /I W3SQLMGR >NUL: 2>&1 >>"C:\scripts\SQL-restart\mail.txt" pslist.exe /accepteula NTBTRV | findstr /B /I NTBTRV >NUL: 2>&1 >>"C:\scripts\SQL-restart\mail.txt" findstr /C:"W3SQLMGR" "C:\scripts\SQL-restart\mail.txt" && goto find-str goto :EOF :find-str findstr /C:"NTBTRV" "C:\scripts\SQL-restart\mail.txt" && goto blat-mail goto :EOF :blat-mail cd /d "C:\scripts\SQL-restart" Blat -install sql-server1.domain.local sysadmin@domain.de Blat "mail.txt" ^ -to administrator@domain.de -server mail.domain.de -u administrator@domain.de -pw password ^ -debug -timestamp -log blatSMTPlog.txt ^ Ich möchte nun, dass beim Ermitteln nur eines von beiden Diensten eine entsprechende Mail versendet wird, die eine Fehlermeldung enthält. Kann ich die bislang verwendete Syntax für findstr mit if/else kombinieren bzw. gibt es einen anderen Weg oder muss ich für diesen Vorsatz bei Null beginnen? Danke für jede konstruktive Hilfe vorab.
  24. Meine Idee: Mit PsList (oder einem anderen Tool, wenn jemand Alternativen dazu kennt) möchte ich den Erfolg des Starts eines Prozesses ermitteln, indem ich bspw. gezielt nach dem Prozess frage und das Ergebnis entweder pipe oder direkt an eine weitere Batch übergebe. Wird im Ergebnis der Abfrage der Name des Prozesses ermittelt, wird eine Aktion X ausgeführt, bei negativem Ergebnis eine andere Aktion Y. Ist es generell möglich, das Ergebnis ohne Umleitung (bspw. in eine Textdatei) direkt zu filtern und von PsList an CMD zu übergeben oder muss das Ergebnis der Abfrage zuerst in eine Datei umgelenkt werden? Wie kann ich z.B. per Batch einen String aus einer Textdatei herauslesen, um in Abhängigkeit von dessen Inhalt eine Aktion durchzuführen? Bsp.: Wenn ich mit pslist nach spoolsv suche und das Ergebnis in eine Textdatei umlenke, bekomme ich bei laufendem Prozess dieses Ergebnis: Process information for PC: Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time spoolsv 1428 8 12 294 7832 0:00:00.187 2:49:15.507 Läuft der Prozess nicht, wirft pslist diese Ausgabe aus: Process information for PC: process spoolsv was not found on PC Nun könnte ich, wenn dies überhaupt möglich ist, nach dem String "process spoolsvc was not found" suchen lassen und bei Erfolg meine definierte Aktion auslösen. Kann das so funktionieren bzw. welche Alternativen bieten sich an, falls meine Idee nicht umsetzbar ist? Danke vorab für jede Hilfe.
×
×
  • Neu erstellen...