locked
PowerShell - Prosím o pomoc RRS feed

  • Dotaz

  • Dobrý den,

    mám problém se scriptem, úděl scriptu je projít 3 textové soubory a poskládat zasebou text tak aby z nich vznikli další scripty větsinou pro distribuci nebo mazání souborů

    $HWS = get-content "D:\PowerShell\HW.txt"
    $TasksStart = get-content "D:\PowerShell\TasksStart.txt"
    $TasksEnd = get-content "D:\PowerShell\TasksEnd.txt"

    foreach($HW in $HWS) {
        foreach($Task in $TasksStart) {
               foreach($TaskEnd in $TasksEnd) {
                 $Task+" "+$HW+$TaskEnd+" > D:\PowerShell\Vystup.txt"
                }
            }
    }

    problém vzniká určite v cyklu nevím si rady jak vyřešit problém s tím že mi cyklus probíhá 2x na jednom HW,

    prosím o nějakou radu a předem moc děkuji

    úterý 21. února 2017 8:44

Odpovědi

  • Tak by to mohlo být nějak takto:

    $HWS = get-content "D:\PowerShell\HW.txt" $TasksStart = get-content "D:\PowerShell\TasksStart.txt" $TasksEnd = get-content "D:\PowerShell\TasksEnd.txt" echo "echo Zacatek generovaného scriptu > D:\PowerShell\Vystup.txt" foreach($HW in $HWS) { for ($i = 0; $i -lt $TasksStart.Count; $i++) { $TasksStart[$i]+$HW+$TasksEnd[$i]+" >> D:\PowerShell\Vystup.txt" } }

    Nijak se nehlídají počty řádků, takže pokud bude menší počet řádků v souboru TasksEnd než je počet řádků v souboru TasksStart, script selže.

    Určitě by to šlo napsat lépe ale můžeš se od toho odrazit.


    JCH

    • Navržen jako odpověď Jan Chaloupek úterý 21. února 2017 11:29
    • Označen jako odpověď Rendy1996 úterý 21. února 2017 11:30
    • Upravený Jan Chaloupek úterý 21. února 2017 14:59
    úterý 21. února 2017 10:26

Všechny reakce

  • Máš 3 vnořené cykly, tak se tak vykonávají.

    get-content vrací obsah po řádích, takže pokud máš obsah souboru na více řádcích bude se vykonávat opakovaně pro každý řádek.

    Můžeš sem dát příklady obsahu těch souborů a co má být výstupem?


    JCH

    úterý 21. února 2017 9:02
  • HW má být název počitače např -> "PC1, PC2, PC3"

    TaskStart má být např -> "X copy "D.\File.txt"

    TaskEnd má být např -> kam se soubor kopíruje nebo co se maže

    pak to má vypadat např xcopy "D:\File" "\PC1\cesta kam kopíruju"
    xcopy "\PC2\D\aplikace\file  " "\PC2\cesta kam kopíruju"

    úterý 21. února 2017 9:19
  • Takže chceš spojit

    první řádek v souboru HW s první řádkem v souboru TaskEnd,

    druhý řádek v souboru HW s druhým řádkem v souboru TaskEnd,

    ...

    a začátek bude pořád stejný?

    Muséš si definovat zadání!

    Může být ve všechn souborech více řádků?

    Pokud ano jak se mají kombinovat s oststními řádky v ostatních souborech.

    Tak jak to máš napsané se kombinují všchny řádky se všemi řádky. Pro 3 řádky v každém ze 3 souborů to vypadá takto:

    S1R1 + S2R1 + S3R1

    S1R1 + S2R1 + S3R2

    S1R1 + S2R1 + S3R3

    S1R1 + S2R2 + S3R1

    S1R1 + S2R2 + S3R2

    S1R1 + S2R2 + S3R3

    S1R1 + S2R3 + S3R1

    S1R1 + S2R3 + S3R2

    S1R1 + S2R3 + S3R3

    S1R2 + S2R1 + S3R1

    S1R2 + S2R1 + S3R2

    S1R2 + S2R1 + S3R3

    S1R2 + S2R2 + S3R1

    S1R2 + S2R2 + S3R2

    S1R2 + S2R2 + S3R3

    S1R2 + S2R3 + S3R1

    S1R2 + S2R3 + S3R2

    S1R2 + S2R3 + S3R3

    S1R3 + S2R1 + S3R1

    S1R3 + S2R1 + S3R2

    S1R3 + S2R1 + S3R3

    S1R3 + S2R2 + S3R1

    S1R3 + S2R2 + S3R2

    S1R3 + S2R2 + S3R3

    S1R3 + S2R3 + S3R1

    S1R3 + S2R3 + S3R2

    S1R3 + S2R3 + S3R3

    Takže to máš 3*3*3=27 kombinací (výsledých řádků)

     

    Pokud to má být jinak, musíš definovat JAK to má být.


    JCH

    úterý 21. února 2017 9:28
  • omlouvám se tak znovu a lépe

    Cílém zadání je, aby všechny HW měli všechno z TaskStart i TaskEND jednoduše řečeno aby všechno bylo se vším, protože potřebuji kolikrát provést více přikazů, tak že bych si do souborů HW napsal názvy počítačů, do Taskstart příkaz který se má provést a taskend kde se má provést

    po spojení nám to dá třeba 4 příkazy (3x xcopy 1x delete) pro 7 počítačů

    úterý 21. února 2017 9:46
  • Takže v těch 3 souborech bude

    7 řádků v souboru HW a

    4 řádky v souboru taskStart a

    4 řádky v souboru taskEnd

    ale výstupů má být pouze 7*4 = 28?


    JCH

    úterý 21. února 2017 9:49
  • Ano přesně tak :)
    úterý 21. února 2017 9:59
  • Tak by to mohlo být nějak takto:

    $HWS = get-content "D:\PowerShell\HW.txt" $TasksStart = get-content "D:\PowerShell\TasksStart.txt" $TasksEnd = get-content "D:\PowerShell\TasksEnd.txt" echo "echo Zacatek generovaného scriptu > D:\PowerShell\Vystup.txt" foreach($HW in $HWS) { for ($i = 0; $i -lt $TasksStart.Count; $i++) { $TasksStart[$i]+$HW+$TasksEnd[$i]+" >> D:\PowerShell\Vystup.txt" } }

    Nijak se nehlídají počty řádků, takže pokud bude menší počet řádků v souboru TasksEnd než je počet řádků v souboru TasksStart, script selže.

    Určitě by to šlo napsat lépe ale můžeš se od toho odrazit.


    JCH

    • Navržen jako odpověď Jan Chaloupek úterý 21. února 2017 11:29
    • Označen jako odpověď Rendy1996 úterý 21. února 2017 11:30
    • Upravený Jan Chaloupek úterý 21. února 2017 14:59
    úterý 21. února 2017 10:26
  • Mockrát děkuji, jen pořád nechápu, proč mi to vypisuje řádke v HW.txt navíc

    př.

    Přikaz1PC1
    Příkaz2PC1
    PC1 <-- myslím tohle
    Příkaz1PC2
    Příkaz2PC2
    PC2

    úterý 21. února 2017 11:10
  • Načítá se to po řádcích.

    Evidentně máš prázdný řádek navíc v souboru TasksStart.txt! S obsahem souboru HW.txt to nesouvisí.


    JCH

    úterý 21. února 2017 11:27
  • mockrát děkuji za pomoc hned jsem chytřejší

    přeji příjemný den

    úterý 21. února 2017 11:31