PDA

View Full Version : [Batch]Link con privilegi amministrativi


23Andrea
15-02-2020, 09:34
Ciao.
Devo lanciare uno script batch per "trascinamento", spostando l'icona del file da elaborare sulla icona del link dello script: nel codice dello script il parametro %1 restituisce il percorso completo del file.
Il nome del file (o il percorso) possono contenere degli spazi.
Se lo script deve essere eseguito senza privilegi amministrativi, tutto ok: il parametro %1 viene trasformato automaticamente nel percorso virgolettato.
Ma io ho bisogno di eseguire lo script con privilegi amministrativi: nelle proprietà avanzate del collegamento ho selezionato l'opzione "Esegui come amministratore" perchè sia richiesta l'elevazione dei privilegi.
In questo caso, però, se il percorso completo contiene degli spazi, lo script si chiude senza essere eseguito.
C'è una soluzione?
Grazie.

misterx
15-02-2020, 10:29
hai provato con "%1"

23Andrea
15-02-2020, 10:58
Si.
Non funziona.

misterx
15-02-2020, 11:37
prova con:

SET MIO_PATH=%1
bla
bla
bla

e poi usi %MIO_PATH% in luogo di %1

23Andrea
15-02-2020, 15:03
Continua a non funzionare.
Non riesco a capire se sia un bug o un contorto meccanismo di sicurezza o cos'altro.

Ho provato questo:

SET MIO_PATH=%1
ECHO %MIO_PATH%
PAUSE

Se il link non eleva i privilegi, restituisce il percorso in ogni caso (con spazi vuoti o no).
Se il link eleva i privilegi, restituisce il percorso solo se è senza spazi.
Ho provato a creare due files nello stesso percorso:
- uno con nome "Pippo.txt Pluto.txt"
- l'altro con nome "Pippo.txt"
Se il problema fosse la mancata virgolettatura del nome, trascinando il primo file si dovrebbe ottenere il percorso completo del secondo: perchè i percorsi sono uguali e il nome del primo file sarebbe troncato in corrispondenza dello spazio.
Ma non funziona nemmeno così: quindi non è un problema di virgolettatura :muro:

misterx
15-02-2020, 15:45
esagerando

SET MIO_PATH="%1"
ECHO "%MIO_PATH%"
PAUSE

23Andrea
15-02-2020, 16:49
Macchè :mad:

Forse devo cambiare tattica: scrivere due righe di VBS per aprire lo UAC prima dello script:incazzed:

misterx
15-02-2020, 18:54
temo sia una policy di windows

se provi ad aprire una shell con l'attuale user e trasccini al suo interno un file anche con spazi vedi percorso completo tra doppi apici.
Se apri una shell come amministratore e fai la stessa cosa cioè, trascini un file al suo interno non appare nulla.

Shirov
16-02-2020, 07:56
Prova con "%*"

23Andrea
16-02-2020, 10:52
temo sia una policy di windows
...


Ma dai!...una policy che funziona solo con i nomi che contengono spazi?
Non ci mancava che questo!

"%*"
Non funziona nemmeno questo.

Io mi arrendo. Grazie lo stesso a tutti.

misterx
17-02-2020, 06:18
ultimo tentativo, provare con:


runas /user:DOMINIO\Administrator "pippo.bat %1"


da mettere al posto del "path+nome file batch" nel link simbolico

Kaya
17-02-2020, 09:16
Potresti usare il powershell e aggirare il problema.
Ovvero converti il tuo batch in .ps1 (che dovrebbe funzionare out of the box).
Nel tuo "lancia.bat" lo modifichi così

SET MIO_PATH=%1
@powershell.exe -NoProfile -ExecutionPolicy Bypass -File "loScript.ps1 -paramtero '%MIO_PATH%' "

Dovrebbe funzionare così, in alternativa verifica solo se c'è un modo diverso per passare il parametro che non sono sicuro su apice singolo o doppio apice

misterx
17-02-2020, 10:26
alla fine la soluzione era banale

al link simbolico aggiungi la parte in grassetto:


%Windir%\System32\cmd.exe /C C:\miadir\mio.bat


più che policy forse è un bug di windows

23Andrea
17-02-2020, 13:53
Grande!
Funziona davvero :)
Grazie mille!

misterx
17-02-2020, 14:23
Grande!
Funziona davvero :)
Grazie mille!


che versione di windows stai usando?

23Andrea
17-02-2020, 14:33
Windows 7 pro SP1 (x64)

misterx
17-02-2020, 14:54
Windows 7 pro SP1 (x64)

io l'ho testato con win 8.1 home ed ha il medesimo problema del tuo win 7 pro quindi, un baco storico che si risolve anche in win 8.1 nel medesimo modo.