Nejčastěji odpovídající uživatel
PowerShell - Prosím o pomoc

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
- Upravený Jan Chaloupek úterý 21. února 2017 9:30
ú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
- Upravený Jan Chaloupek úterý 21. února 2017 11:32
ú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