none
Prosím o pomoc s PS skriptem

    Dotaz

  • Dobrý den,

    chtěl bych se na někoho z Vás obrátit s prosbou o pomoc s Powershell skriptem, já už prostě nevím a jsem z toho na hlavu.

    Jedná se o skript který vezme soubor z dane lokace, presune si ho do adresare ke zpracovani a uploadne vsechny soubory v danem adresari na dane URL.

    Já musím ještě tento skript upravit tím způsobem, aby pokud je spusten bez parametru, aby se alespon pokusil uploadnout ty soubory, ktere jsou v not-copied, pokud tam nejake jsou. A dále aby  pokud parametr existuje, ale neni soubor, tak aby skoncil s chybou.

    V powershellu zatím začínám a opravdu netuším jak to do toho zakomponovat. Mohl by mi prosím někdo pomoc?

    Skript zasílám níže

    #########################################################

    #Get list of servers to push new files to#
    $server = "http://somenthing-path/service/analyzer-log/save-log-file"
     
    #Nastavení kde jsou nové soubory a načtení jako proměné#
    $newfilepath = "C:\myfolder"
    $newfiles = Get-ChildItem $newfilepath | where {$_.name -like "*.txt*"}
    $prodfolderpath = "$newfilepath\not_copied\"
    $copied ="$newfilepath\copied\"
    #Zjištění data a času#
    $date = Get-Date -format yyyy_dd_MM
    $time = get-date -format HH_mm_ss
    $filename = $args[0]
    $destination=$copied+$date+"-"+$time+".csv"
    $production=$prodfolderpath+$date+"-"+$time+".txt"
    #write-host $filename

    function global:Test-and-create-dir ($FullPathName) {
    if (!(test-path "$FullPathName"))
    {
        New-Item -type directory "$FullPathName" >$null
    }
    }

    Test-and-create-dir("$newfilepath\vystup\");
    Test-and-create-dir("$newfilepath\not_copied\");
    Test-and-create-dir("$newfilepath\copied\");

    #Testuje zda existuje log a výstupní adresář. Pokud ne, vytvoří ho#
     
    if (!(Test-Path "$newfilepath\vystup\rptmove.log"))
    {
        New-Item -type file "$newfilepath\vystup\rptmove.log"
    }

    $log = "$newfilepath\vystup\rptmove.log"

    copy-Item -path $filename -destination $production

    $wc = new-object System.Net.WebClient

    get-childitem $prodfolderpath | foreach {
    $curfile=$_.Name
    $fullcurfile=$prodfolderpath+$curfile
    $output=$wc.UploadFile( $server, $fullcurfile )

    if ($output[11] -eq 116 )
    {
        write-host("Upload uspesny:  "+$fullcurfile)
        $destfile=$copied+$curfile
        move-Item -path $fullcurfile -destination $destfile
        }
    }

    write-host("Konec UPLOADU")

     

    ##########################################################

    19. června 2012 11:06

Odpovědi

  • Ano, definujete si tam svoji vlastní funkci, která má jeden parametr $FullPathName, ten se pak do funkce předává, když ji voláte, tedy:

    Test-and-create-dir("$newfilepath\vystup\");
    Test-and-create-dir("$newfilepath\not_copied\");
    Test-and-create-dir("$newfilepath\copied\");

    Funkce provede to, že vytvoří adresář v definované cestě. A řekl bych, že trochu zvláštním způsobem potlačuje výstup přesměrováním do $null.


    Petr Bouška www.samuraj-cz.com

    3. července 2012 11:14

Všechny reakce

  • Proc to nezkusite resit po castech? Skript je z vasi dilny, nebo upravujete uz publikovany skript? Pokud ano, bylo by dobre uvest odkud.

    M

    19. června 2012 13:18
    Moderátor
  • Skript je od nás, bohužel člověk co ho dělal už tu nepracuje a já do toho spadnul ani nevím jak. Moje zkušenosti jsou s Batch skriptama a z takto objektově orientováných skriptů nejsem opravdu moudrý.

    Této části rozumím bez problému

    #Get list of servers to push new files to#
    $server = "http://somenthing-path/service/analyzer-log/save-log-file"
     
    #Nastavení kde jsou nové soubory a načtení jako proměné#
    $newfilepath = "C:\myfolder"
    $newfiles = Get-ChildItem $newfilepath | where {$_.name -like "*.txt*"}
    $prodfolderpath = "$newfilepath\not_copied\"
    $copied ="$newfilepath\copied\"
    #Zjištění data a času#
    $date = Get-Date -format yyyy_dd_MM
    $time = get-date -format HH_mm_ss
    $filename = $args[0]
    $destination=$copied+$date+"-"+$time+".csv"
    $production=$prodfolderpath+$date+"-"+$time+".txt"
    #write-host $filename

    Zde se pouze specifikují proměné.

    Poté následuje první problém 

    function global:Test-and-create-dir ($FullPathName) {
    if (!(test-path "$FullPathName"))

    Pokuď tomu správně rozumím tak "test-and-create-dir" je pouze naše vlastní pojmenování funkce.. Nevím kde se vzala proměná ($FullPathName) . Pokuď není cesta $FullPathName

    Provede New-Item -type directory "$FullPathName" >$null   - Této části nerozumím


    19. června 2012 15:19
  • Ano, definujete si tam svoji vlastní funkci, která má jeden parametr $FullPathName, ten se pak do funkce předává, když ji voláte, tedy:

    Test-and-create-dir("$newfilepath\vystup\");
    Test-and-create-dir("$newfilepath\not_copied\");
    Test-and-create-dir("$newfilepath\copied\");

    Funkce provede to, že vytvoří adresář v definované cestě. A řekl bych, že trochu zvláštním způsobem potlačuje výstup přesměrováním do $null.


    Petr Bouška www.samuraj-cz.com

    3. července 2012 11:14
  • Kontrola jestli existuje soubor (tu tam už několikrát máte):

    if((Test-Path "cesta") -eq $False) {

    write-host "Doslo k chybe"

    break

    }

    Nevím, jaký soubor chcete kontrolovat, když to dáte na začátek a místo cesta zadáte cestu k souboru, tak pokud nebude existovat, tak vypíše chybu a skončí.


    Petr Bouška www.samuraj-cz.com

    3. července 2012 11:23
  • Kontrolu zadaného parametru můžete provést následovně. Do podmínky uzavřete to, co se má provést pouze v případě, kdy je argument zadán.

    if($args[0] -ne $null) {

    ...

    }


    Petr Bouška www.samuraj-cz.com

    3. července 2012 11:31