Jump to content

ibicis

Members
  • Gesamte Inhalte

    79
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt 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.

    post-53509-0-68443000-1394033516_thumb.png

  2. Vielen Dank für den Tipp.

    Einfaches aneinanderreihen funktioniert unproblematisch, auch ""Heute ist " + $date" ist nachvollziehbar, aber "$date + " Uhr"" funktioniert offenbar nicht:

     

    Das Argument "1" mit dem Wert " Uhr" für "op_Addition" kann nicht in den Typ "System.TimeSpan" konvertiert werden: "Der Wert " Uhr" kann nicht in den Typ "System.TimeSpan" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format.""

     

  3. 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.

  4. 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.

  5. 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?

  6. 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?

     

  7. ...

     

    Zum Filtern der Ausgabe kannst du Select-object oder Format-Table verwenden

     

    ...

    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):

     

    NTUSER.DAT

    NTUSER.DAT

    NTUSER.DAT

    NTUSER.DAT

    NTUSER.DAT

    NTUSER.DAT

    \\netzwerk-pc\C$\Dokumente und Einstellungen\administrator\Eigene Dateien\Eigene Bilder\Beispielbilder.lnk, 12/07/2012 12:00:34, 907

    \\netzwerk-pc\C$\Dokumente und Einstellungen\administrator\Eigene Dateien\Eigene Musik\Beispielmusik.lnk, 12/07/2012 12:00:34, 897

  8. 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.

  9. 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.

  10. 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:

    BEX_SERVER-BACKUP_01463.txt:2:Auftragsname : Laufwerk inventarisieren

    BEX_SERVER-BACKUP_01463.txt:3:Auftragsprotokoll: C:\Program Files\Symantec\Backu

    p Exec\Data\BEX_SERVER-BACKUP_01463.xml

    BEX_SERVER-BACKUP_01463.txt:4:Gerätename : QUANTUM 1

    BEX_SERVER-BACKUP_01463.txt:5:

    BEX_SERVER-BACKUP_01463.txt:6:

    BEX_SERVER-BACKUP_01463.txt:7:Schacht Strichcode

    Medienkennung StatusGerät

    BEX_SERVER-BACKUP_01463.txt:8:--------------------------------------------------

    ----------------------------------------------

    BEX_SERVER-BACKUP_01463.txt:9:

    Samstag 3 QUANTUM 1

    BEX_SERVER-BACKUP_01463.txt:10:

    BEX_SERVER-BACKUP_01463.txt:11:Auftrag gestartet: Samstag, 17. November 2012 14:

    00:02

    BEX_SERVER-BACKUP_01463.txt:12:Auftrag beendet : Samstag, 17. November 2012 14:

    00:27

    BEX_SERVER-BACKUP_01463.txt:13:Abschlussstatus : Erfolgreich

    Es müssten die ersten 33 Characters jeder Zeile gekürzt werden.
  11. 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

  12. Hi,

     

    warum möchtest Du die Datei einlesen - hat BackupExec kein Ereignisprotokoll bzw. nutzt es nicht die Windows Ereignisprotokolle?

     

    Ansonsten würde ich auch vorschlagen, die PowerShell zu nutzen.

    Mittels Get-Content, Select-String und Konsorten läßt sich Dein Vorhaben sicher recht einfach und schnell lösen.

     

    Sofern die Logdateien im XML-Format vorliegen, kannst Du diese mit der PowerShell noch einfacher einlesen.

     

    Viele Grüße

    olc

    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.

  13. 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:

    Servername : SERVER-BACKUP1

    Auftragsname : Laufwerk inventarisieren

    Auftragsprotokoll: C:\Program Files\Symantec\Backup Exec\Data\BEX_SERVER-BACKUP1_01443.xml

    Gerätename : QUANTUM 1

     

     

    Schacht Strichcode Medienkennung StatusGerät

    ------------------------------------------------------------------------------------------------

    Montag QUANTUM 1

     

    Auftrag gestartet: Montag, 12. November 2012 14:00:01

    Auftrag beendet : Montag, 12. November 2012 14:00:23

    Abschlussstatus : Erfolgreich

    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.

  14. Einen Client den du aufzeichnen möchtest behandelst du beispielhaft wie folgt:

     

    - Installation über Windows7 DVD Datenträger (MSDN / Technet Quelle!)

    - Falls Anwendungen und Treiber installiert werden sollen, das Referenzsystem mittels sysprep /audit neustarten. In diesem Modus kannst du Anwendungen installieren, Treiber bereit stellen etc. Beliebige Neustarts bringen dich wieder in den Audit Modus.

    - Nach dem du mit dem Audit Modus dein Ziel erreicht hast, fährst du das System mit sysprep /generalize /oobe /shutdown herunter. Dein System ist jetzt bereit mit einem Capture Medium aufgezeichnet zu werden.

     

    - Start vom Capture Medium und beginn des Aufzeichnens.

     

     

    cheers, Daniel

    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...
  15. Hast du den Client den du capturen willst mit sysprep /generalize /oobe /shutdown beglückt?

     

    Oder ein anderer Klassiker, hast du sichergestellt, dass das Boot Image den MAss Storage Driver enthält?

    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.

  16. 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.

  17. Bist Du sicher, dass das Script weiß, wohin "mail-body.txt" gespeichert werden soll?

    Ich würde mal testweise absolute Pfade angeben, also

    echo Test-Mail > "c:\temp\mail-body.txt"

    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.

  18. 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.

  19. 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.

  20. 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...