Tak teda napokon SOLVED.
ooooooooo tu ukazal skutocne cestu ako na to, ale malo to jednu muchu -- uzivatelsky komfort -- vzdy by bolo treba spustat powershell, menit execution policy a napokon spustit skript.
Zakladny problem je, ze powershell v default nastaveni nechce vykonavat skripty, ktore nie su podpisane. Navyse, tato politika sa neda trvalo zmenit, len cez interface powershellu a len na danu session (zmena policy vyzaduje potvrdenie uzivatela).
Existuje na to taky bypass: v principe mozno zadavat prikazy powershellu ako parameter pri jeho spusteni cez cmd, napr.
- Kód: Vybrat vše
powershell -command "1+2"
>> 3
Toto ale ma jednu nevyhodu -- niekedy sa samotny cmd pokusi parsovat obsah prikazu powershellu (pri "1+2" to funguje ok, ale je to nevyspytatelne). Takze treba urobit bypass bypassu a to tak, ze ten prikaz powershellu sa zakoduje. Tu je priklad:
- Kód: Vybrat vše
$code = {start-process "C:\files\prog\program.exe"}
$encd = [convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))
Vznikne nieco podobne (nenapisem to cele, je to dllhy retazec):
- Kód: Vybrat vše
cwB0AGEAcgB0AC0AcAByAG8AYwBlAHMAc
No a teraz uz len v cmd (napr. aj cez batch-file) zadat
- Kód: Vybrat vše
powershell -encoded cwB0AGEAcgB0AC0AcAByAG8AYwBlAHMAc
No a takto sa da pokracovat zlozitejsimi prikazmi resp. celym "programom" -- v podstate prinutite powershell vykonavat skript, ani o tom sam nevie
a je to proti jeho execution policy. Samozrejme -- ked to je treba, musi sa bat spustat pod admin pravami, ale na to už bypass nie je