Jump to content

Pet7

Members
  • Gesamte Inhalte

    17
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Pet7

  1. Hallo und guten Abend,

     

    ich benötige Hilfe.

     

    Gibt es die Möglichkeit nach geöffneten Dateien zu filtern.

     

    z.B. get-childitem c:\windows\ (ich möchte alle Dateien die durch eine Anwendung oder User geöffnet sind filtern).

     

    Vielen Dank im Voraus.

     

    Pet7 :)

  2. Hallo.

    ich benötige Hilfe.

    Habe versucht mit dem nachfolgenden Code eine Datei per Powershell aus dem Internet downloaden, was zwar funktioniert, aber nicht das ist was ich wollte.

    Hier der Code:

     

    $url = "http://www.xxxxxxxxxx.de/statistik/statistikyyyyyyyyyyy.php?open=zinsen&func=row&tr=xxxxxx"

    $dst = "U:\FTHost\RZ\Import_xxxxxxxxxxxxxx\yyyyyyyyy.csv"

    $obj = new-object System.Net.WebClient

    $obj.DownloadFile($url,$dst)

    if ( !$? ) { Write-host "Fehler: $ERROR[0]";exit 1 }

     

    Wenn ich mir die Datei anschaue habe ich folgenden Inhalt:

     

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <HTML lang="de">

    <head>

     

     

    Die Datei die ich runterladen wollte ist eine CSV-Datei.

     

    PS-Version = 2.0

     

    Bitte um Hilfe, bin noch Anfänger! Danke im voraus.

  3. Noch ne Möglichkeit für die ps1-Datei:

    Copy-Item 'C:\Temp\gibtsnicht.txt' 'c:\Temp\a' -ErrorAction "Stop" -ErrorVariable $err
    exit $err

     

    Batch, wie Bernd beschrieben hat.

     

    Die ganzen $-Variablen braucht Du in der Batch überhaupt nicht!

     

    Hallo,

     

    habe es ausprobiert, hat funktioniert.

    Ich möchte es auch verstehen, deshalb noch die Frage:

    In der $err steht der Returncode der per exit $err an die Variable %errorlevel% übergeben wird - ist das korrekt?

     

    Danke.

     

    Gruß Pet7

  4. Hallo Pet7,

    ich fasse mal zusammen:

    Du startest aus einem Batchfile heraus ein Powershell Skript. In dem PS Skript führst Du Befehle aus, z.B. kopieren, die evtl. schief gehen können. In Abhängigkeit dessen willst Du in Deinem Batchfile mit Hilfe von %errorlevel% darauf reagieren.

     

     

    CMD Test-Batch "test.bat" (wie in dem Link von cybquest beschrieben):

    
    @echo off
    powershell -noprofile -command "& {"d:\Test\test.ps1"; exit $Lastexitcode}"
    echo Rueckgabewert: %errorlevel%
    
    

     

     

    Powershell Test-Skript "test.ps1":

    
    $ErrorActionPreference = 'Stop'
    trap {
    "Ein Fehler ist passiert"
    exit 5
    }
    
    Copy-Item 'C:\Temp\gibtsnicht.txt' 'c:\Temp\a'
    
    

     

     

    Die Variable $ErrorActionPreference muss auf Stop gestellt werden damit der Fehler nicht von cmdlet selbst sondern von der Trap behandelt wird. Das gilt dann für alle cmdlets. Alternativ kannst du beim jeweiligen cmdlet auch den Parameter -Erroraction 'stop' anhängen.

    In der Trap wird das Skript mit dem Exitcode, im Beispiel 5, verlassen.

     

     

    Hoffe das hilft Dir

    Gruß

    Bernd

     

     

    Hallo Bernd,

     

    erst mal vielen Dank für die Antwort.

    Werde das jetzt mal ausprobieren.

    Verstehe ich das richtig, dass in jeder Batchdatei dann die Variable

    $ErrorActionPreference entsprechend gesetzt werden muß?

     

    Was ist mit den Variablen $Error + $?, kann ich die dafür nicht verwenden?

    Vorab schon Danke.

     

    Gruß

    Pet7

  5. Schau mal hier:

    Microsoft und Umwelt : Windows PowerShell Exit Codes: wie nutzen?

     

     

    Wäre es nicht eleganter, einfach alles per Powershell zu erledigen, statt mit Batch plus Powershell?

     

    Hallo Cybquest,

     

    habe mir die Seite mal angeschaut.

    Bei mir funktioniert das nicht!

     

    Hier der Inhalt meiner Script-Datei H:\e1.ps1 :

     

    Copy-Item c:\ps\e12.txt c:\ps\a2.txt

     

    (die Datei e12.txt gibt es nicht!)

     

     

    Hier der Aufruf an der Console:

     

    H:\>powershell -command "& { H:\e1.ps1;exit $Lastexitcode}"

     

    und hier die Ausgabe des Kommandos:

     

    H:\>echo %errorlevel%

    0

     

    H:\>powershell -command "& { H:\e1.ps1;exit $Lastexitcode}"

    Copy-Item : Cannot find path 'C:\ps\e12.txt' because it does not exist.

    At H:\e1.ps1:1 char:10

    + Copy-Item <<<< c:\ps\e12.txt c:\ps\a2.txt

    + CategoryInfo : ObjectNotFound: (C:\ps\e12.txt:String) [Copy-Item], ItemNotFoundException

    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

     

     

    H:\>echo %errorlevel%

    0

     

     

    Ich verstehe es nicht.

     

    Gruß Pet7

  6. Hallo Pet7,

    mit Powersell geht das auf jeden Fall:

    1. Kannst Du alles was du im Batch aufrufst auch direkt in Powershell aufrufen z.B. robocopy.exe und dann mit $Lastexitcode arbeiten

    2. Kannst Du die Variable $? aus werten die True zurückgibt wenn der Letzte Befehl erfolgreich war

    3. Kannst Du $error auswerten

    4. Kannst Du sog. Traps oder Try-Catch Blöcke (ab PS V2.0) verwenden um Fehler abzufangen bzw. darauf zu reagieren

     

    Wenn Du deinen Code mal reinstellst kann ich sicher auch konkreter werden.... .

     

    Bruß

    Bernd

     

    PS: Schau mal bei xxxxxxx rein

     

     

    Hallo Bernd,

     

    danke für die Antwort.

     

    zur Zeit läuft der Job wie folgt:

     

    Inhalt der Batchdatei:

     

    copy Quelldatei Zieldatei

    if %errorlevel% ne 0 set retcode=%errorlevel%

     

    #bei %retcode% ungleich 0 wird dann zum Fehlerausgang gesprungen und keine Folgeverarbeitung angestoßen

     

     

    Künftig möchte ich den Code in eine Datei copy.ps1 schreiben.

    Diese wird dann wie folgt aus einer Batchdatei gestartet:

     

    cmd.exe:

     

    powershell -name C:\copy.ps1

     

    Anschließend muß die Variable %retcode% entsprechend versorgt werden.

     

    set retcode= wie auch immer.

     

    Gruß

     

    Pet7

  7. Schau mal hier:

    Microsoft und Umwelt : Windows PowerShell Exit Codes: wie nutzen?

     

     

    Wäre es nicht eleganter, einfach alles per Powershell zu erledigen, statt mit Batch plus Powershell?

     

    Hallo Cybquest,

     

    auch dir erstmal danke.

    Es muß über die Batch-Datei laufen!

    Ich glaube das funktioniert so nicht.

    Habe gelesen dass die Variable $lastexitcode nur für externe Programme gilt.

    Wenn ich z.B. ein Copy-Commando verwende und der Pfad ist fehlerhaft wird die Variable nicht gesetzt.

    Werde das aber alles nochmal in Ruhe überprüfen.

     

    Gruß Pet7

  8. Hallo,

    In der Powershellhilfe steht sehr viel dazu

    get-help about_CommonParameters

    z.B. unter -Erroraction

     

    Evtl. findest du hier auch was

    PowerShell Preference Variables /CommonParameters - PowerShellPraxis.de

     

    Darüber wie man PS-skripte startet, findest du hier gute Infos

    Running Windows PowerShell Scripts

     

    cu

    blub

     

    Hallo blub,

     

    erst mal danke für die schnelle Antwort.

    Habe die eine oder andere Seite zu diesem Thema im Web schon ausfindig gemacht. Nur ist es nicht so einfach das umzusetzen.

    Da ich das PS-Script aus einer Windows-Batchdatei starte muß ich bei einem Fehler der im PS-Script auftaucht die Variable %errorlevel% setzen damit ich richtig auf die Folgeverarbeitung reagieren kann.

     

    Danke schon mal.

     

    Pet7

  9. Hallo,

    bin neu hier und möchte mich gerne in Powershell einarbeiten.

    Ich suche eine Lösung um Fehler im Script abzufangen und darauf zu reagieren. Wenn im Script ein Fehler auftritt soll das Script abbrechen und einen Fehlerschalter setzen sodass eine Folgeverarbeitung nicht anläuft.

    Ich möchte ein Powershellscript in einer Batchdatei aufrufen.

    Z.Zt. wird der Errorlevel gesetzt und abgefragt, so können Folgejobs (Batch)

    weiterlaufen oder blockiert werden.

     

    Für eine verständliche (Anfänger) Lösung bin ich sehr dankbar.

     

    Pet7:)

×
×
  • Neu erstellen...