Lista winnt@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [WINNT] Powershell z parametrem w poleceniu

To: winnt@man.lodz.pl
Subject: Re: [WINNT] Powershell z parametrem w poleceniu
From: "Grzegorz Niemirowski" <gnthexfiles@poczta.onet.pl>
Date: Tue, 15 Dec 2015 00:44:39 +0100
peter <ToJestTo@nic.nie.wiem> napisał(a):
No to pech, że nie można robić ./$zmienna tak jak to się robi w bat i
linuxie.

Pozwolę sobie tutaj na małą dygresję i uściślenie. Nie bat i linuksie, tylko w starych, tekstowych powłokach. Pod Linuksem popularny jest np. perl i python. Może nie są to powłoki, ale pisze się w nich często skrypty zamiast w bashu. PowerShell z nich czerpie a nie z basha. Czerpie też dużo z Ruby'ego. Zmnienne nie są stringami, tylko obiektami, które mają swój typ, właściwości i metody. Popatrz na takie coś:
$a=ls
$a[0].Name
Do zmiennej $a zostaje przypisana tablica obiektów zwrócona przez polecenie ls. W drugiej linii wyciągany jest pierwszy element tej tablicy a następnie odczytywana jest jego właściwość Name. Właściwości i metody można wyświetlić cmdletem get-member, alias gm, pajpując do niego obiekt. Np. właściwości stringa:
"siema" | gm
Może to wszystko już wiesz, ale trzeba pamiętać o tym, żeby przestawić się z przyzwyczajeń z basha/cmd.

Moja kaskada skryptów wygląda tak
Skrypt główny KK41.ps1
./Wst41y.ps1 41 ax-4 30
./czekaj12 300
i dalsze takie same zestawy z innymi parametrami
skrypt Wst41y.ps1
Param (
 $p1 , $p2 , $p3
)
$plk="st"+$p1+".ps1"
echo $plk
& $plk $p2 ax-5 $p3 364 32
# nie działa
# lub
# $pl="st"+$p1+".ps1"+" $p2 ax-5 $p3 334 32"
# echo $pl
# & $pl
# nie dziala
# takich zestawów jest więcej ( zmieniają się parametry 4 i 5)
Skrypt st41.ps1 zawiera znów 8 zestawów poleceń.
Mimo pozornej złożoności system dotychczas działał bez zarzutu.
Dotychczas jednak przekazywałem tylko parametry ze skryptu do skryptu.
Teraz potrzeba mi przekazania parametru do polecenia skryptu
czyli jak będzie wywołanie w KK41.ps1 ./Wst41y.ps1 41 ax-4 30
żeby wykonał w skrypcie Wst41y.ps1   & st41.ps1 $p2 ax-5 $p3 364 32
a jak będzie wywołanie w KK41.ps1 ./Wst41y.ps1 42 ax-4 30
żeby wykonał w skrypcie WST41y.ps1 & st42.ps1 $p2 ax-5 $p3 364 32
Nie wiem jak 'wywołać akcję na obiekcie'

Np. właśnie operatorem &. Wywołuje się go podając mu polecenie oraz poszczególne argumenty.
$a="C:\Windows\system32\ping.exe"
$b="-n"
$c="1"
$d="wp.pl"
& $a $b $c $d

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 26 days, 6 hours, 14 minutes and 41 seconds

<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>