Powershell skript z USB

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Tomas112233 19. 7. 2016 12:07

Zdravím,

potřeboval bych poradit.

Mám napsaný skript v PS pro nastaveni PC a obcas nějaký kopírování a silent install.

Skripty jsou uložené na usb.

Pokaždé když tu flashku dám do jiného PC tak se vytvoří jiné písmeno flashky a tím pádem skript zahlasí chybu, že cesta neexistuje.

Poradí mi někdo jak by měla vypadat asi relativní cesta k souboru .

myslel jsem, že je to neco jako .\aa\aaa ale kdzy toto použiju tak mi to stejne hleda cestu rovnou na C:\user\.... a zase s chybou ze to neexistuje.
Tomas112233
Kolemjdoucí

Odeslat příspěvekod Nargon 19. 7. 2016 13:24

Ano relativní cesta .\aa\neco je správně. Relativní je z důvodu že se "počítá" z aktuální "working directory" odkud je ten skript spuštěný.
Relativní cesta tedy závisí na tom odkud to spouštíš. Pokud chceš poradit víc tak se svěř s detaily. Třeba jak ten skript spouštíš, protože když na něj poklepeš myší tak by working directory měl být nastaven na složku kde je ten skript.

-- 19. 7. 2016 14:36 --

Ještě jsem si vzpomněl, před příchodem PS se používal obyčejný bat soubor a tam existoval parametr %0, který obsahoval soubor jež jsi spustil. Takže s jednoduchým parametrem "%~dp0" můžeš dostat složku, kde je ten skript uložen.
Kód: Vybrat vše
echo %~dp0
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Tomas112233 19. 7. 2016 14:02

Zdravím,

v první radě spustím PS jako admin a upravím si práva na spouštění skriptů (to jen abych vyloučil možnost špatného spouštění na práva) Set-ExecutionPolicy -ExecutionPolicy Bypass

následně vložím flashku, najdu ho ve složce, pravý tlačítko run with powershell a už to jede ... bohužel s chybou že skript na adrese C:\user\.... neexistuje
Tomas112233
Kolemjdoucí

Odeslat příspěvekod Nargon 19. 7. 2016 14:33

Tak jsem našel toto:
Kód: Vybrat vše
$ScriptDir = split-path -parent $MyInvocation.MyCommand.Path
Set-Location -Path $ScriptDir

Proměnná $ScriptDir obsahuje cestu, ve které složce je ten spouštěný ps script. Takže nastavím working directory na tu cestu, a pak už si můžeš dělat ty relativní cesty. Ze složky kde máš uložený ten skript co spouštíš.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Tomas112233 19. 7. 2016 14:40

a zabere to ikdyz to narvu do jinyho pc?
Tomas112233
Kolemjdoucí

Odeslat příspěvekod Nargon 19. 7. 2016 15:08

Mělo by.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Tomas112233 20. 7. 2016 08:55

Tak jsem asi trubka a neco delam spatne.

Hledal jsem to vsude ... proste relativni ceste by opravdu mela vypadat tak jak jsem to psal ...

takze jeste jednou ....

pustim ps jako admin a nastavim si prava na spousteni skriptu na bypass

nasledne vkladam flasku ... v ni si ve slozce najdu prislusny skript, klikam pravym tlacitkem a davam run with powershell

skript se jmenuje wallpaper + blokace
ve skriptu je uvedeno toto :

Copy-Item -Path .\Wallpapers\aaa\backgroundDefault.jpg -Destination C:\Windows\Web\Wallpaper\Windows
Copy-Item -Path .\Blokace host\hosts -destination C:\Windows\System32\drivers\etc

pokud bych tam dal absolutni cestu tak to jede v pohode.

ale ps se spusti a zahlasi hlasku ze skrip nemuze najit soubory v uvedene ceste C:\users\......

ale podle vsude moznych for atd .. by to melo fungovat. napadnete kde jsem udelal v postupu chybu ?
Tomas112233
Kolemjdoucí

Odeslat příspěvekod Nargon 20. 7. 2016 15:45

Skript ve flashce uprav:
Kód: Vybrat vše
$ScriptDir = split-path -parent $MyInvocation.MyCommand.Path
Set-Location -Path $ScriptDir
Copy-Item -Path .\Wallpapers\*****\backgroundDefault.jpg -Destination C:\Windows\Web\Wallpaper\Windows
Copy-Item -Path .\Blokace host\hosts -destination C:\Windows\System32\drivers\etc

Mě to funguje, zkopírovalo mi to soubor normálně. Ikdyž teda já to kopíruju do D, protože do těch systémových cest asi nemám práva.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod mracka michal 4. 8. 2016 09:23

Od PowerShell verzie 3 (myslim) by mala fungovat premenna $PSScriptRoot (obsahuje cestu k priecinku v ktorom je aktualne beziaci skript).
„You don't need a reason to help people.”
~Zidane Tribal, Final Fantasy IX
--
Pouzivam suborovy manazer Nomad.Net.
mracka michal
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků