Logo Hardware.com.br
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas

[Resolvido] Acesso a arquivos locais via javascript (hta)

#1 Por Shura16 12/02/2015 - 11:47
Gostaria de criar um arquivo HTA para automatizar e embelezar a execução de scripts bat.

Pesquisando um pouco na internet, não encontrei um tópico legal sobre o assunto. Testei algumas opções sem sucesso.
[code=JavaScript]
var backupCode = document.getElementById("txtID");
var backupURL = "copy.bat " + backupCode.value;

var wScriptShell = new ActiveXObject("WScript.Shell");
var oRun = wScriptShell.run(backupURL);
[/code]
Por isso recorro aos colegas.

Através de Javascript ou outra linguagem de script compatível, gostaria de chamar o arquivo bat passando os parâmetros necessários para a execução do mesmo.
"Funcionalidade "viagem""

Ainda assim (viajando agora), se fosse possível, gostaria de listar os arquivos na pasta (com filtro de extensão), então selecionar um e para passar o caminho dele para o bat.


Trata-se de scripts de backup e restauração (ambos manuais) de banco de dados firebird. Através dos scripts bat, executáveis são chamados para realizar estes procedimentos.
Responder
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#3 Por Shura16
13/02/2015 - 07:56
Fergo disse:
Não sei se o cenário mudou de uns dois anos pra cá, mas não era possível efetuar manipulação do computador local (como manipular arquivos ou rodar scripts localmente) através de JavaScript, por questões de segurança.


No navegador isso acontece, mas no HTA a regra é diferente.
Também estou pensando na possibilidade de usar TideSDK que gera resultado semelhante.

Já realizei testes usando AngularJS para acessar webservices em outros servidores, quando usa HTA ele permite, no navegador não.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#5 Por Shura16
19/02/2015 - 08:36
Não preocupei com isso pois fazia isso na linha debaixo:
[code=JavaScript]var backupCode = document.getElementById("txtID");
var backupURL = "copy.bat " + backupCode.value;[/code]

Ainda assim vou tentar e postar aqui.

E esse comando run, tem mais dois parâmetros: 1 e false. O que seriam? Vou tentá-los também.
------------------------------------------- EDIT ---------------------------------------------------------------------

Após testes, consegui. Não sei o que estava dando errado. com um alert após esse código, o código estava correto.
Agradeço.

É uma pena que o HTA não renderiza o boostrap bem (o estilo fica estranho em alguns controles), ia ficar lindo! Vou ver se outros frameworks ficam bons.
Pretendo pesquisar sobre como colocar um gif de loading visível enquanto o comando estiver sendo executado.
Não sei se e possível exibir a saída do comando em uma linha, mas isso não é obrigatório.
Faço o bat ficar oculto com o BATTOEXE.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
jofrelscalvet
jofrelscalve... Veterano Registrado
1.3K Mensagens 51 Curtidas
#6 Por jofrelscalve...
19/02/2015 - 09:25
Uops. Depois de apanhar com as diferenças entre VBscript e Jscript acabei meio cego ... Não sei porque seu código não funciona.

O 1 significa que ao rodar o shell a janela aparecerá na com o foco. Se fosse colocado 2 a janela abriria minimizada.
O false significa que o hta não vai esperar o .bat terminar para continuar seu funcionamento (por exemplo se você mover o código da mensagem de "Testando" para depois da linha do Run no caso do false ela aparece instantaneamente, mas se fosse true ela só apareceria quando você fechasse a janela do .bat). Este parâmetro é muuuito legal, pois te permite em alguns casos fazer um monte de coisas "ao mesmo tempo", ou se você precisar você pode forcar que alguma coisa só ocorra depois de outra terminar.
Um link onde você pode saber mais sobre esse comando: http://ss64.com/vb/run.html
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#7 Por Shura16
19/02/2015 - 10:16
jofrelscalvet disse:
Uops. Depois de apanhar com as diferenças entre VBscript e Jscript acabei meio cego ... Não sei porque seu código não funciona.

Também não, mas agora funcionou. Agradeço!

jofrelscalvet disse:

O 1 significa que ao rodar o shell a janela aparecerá na com o foco. Se fosse colocado 2 a janela abriria minimizada.

A opção 2 é boa, mais discreta, mas para isso eu teria que exibir a saída do comando na tela principal.

jofrelscalvet disse:

O false significa que o hta não vai esperar o .bat terminar para continuar seu funcionamento (por exemplo se você mover o código da mensagem de "Testando" para depois da linha do Run no caso do false ela aparece instantaneamente, mas se fosse true ela só apareceria quando você fechasse a janela do .bat). Este parâmetro é muuuito legal, pois te permite em alguns casos fazer um monte de coisas "ao mesmo tempo", ou se você precisar você pode forcar que alguma coisa só ocorra depois de outra terminar.

Legal mesmo, estou vendo que com ele vou poder habilitar uma gif de loading através de javascript durante a execução do comando. Ao final, posso esconder a gif. Legal!

jofrelscalvet disse:

Um link onde você pode saber mais sobre esse comando: http://ss64.com/vb/run.html


Apesar de estar em VB Script. Vejo que em Javascript é quase a mesma coisa.

Somente este comando
!Pipe.StdOut.AtEndOfStream
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#8 Por intruso
19/02/2015 - 13:21
O contexto de segurança não mudou e isso independe do "formato" de aplicativo usado, os cuidados devem ser os mesmos. Nesse caso especificamente, é ainda mais fácil o usuário alterar e rodar o que deseja no mesmo contexto que seu aplicativo vai rodar, pois não passa de script e html.

Me parece que você vai rodar esse aplicativo para as suas rotinas de manutençao, então leve em consideração o "principio do menor privilegio".

Em termos de segurança, deve-se sempre validar os parametros que serão passados ao segundo utilitario, não se deve passar diretamente parametros da interface a outro programa para execução, o aplicativo pode sofrer uma "injeção de argumentos".

Pode parecer besteira, mas, não dá pra usar uma ferramenta nativa da plataforma para executar esses scripts? Você usa Windows Server? Power Shell não resolve?
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#9 Por Shura16
19/02/2015 - 14:33
intruso disse:
O contexto de segurança não mudou e isso independe do "formato" de aplicativo usado, os cuidados devem ser os mesmos. Nesse caso especificamente, é ainda mais fácil o usuário alterar e rodar o que deseja no mesmo contexto que seu aplicativo vai rodar, pois não passa de script e html.

Sim, existe essa possibilidade. Estava pensando em usar o TideSDK para empacotar isso e evitar este tipo de coisa.
Mas no momento não há este problema. O usuário é confiável (eu mesmo big_green.png).

Atualmente, nós editamos diretamente o arquivo bat para selecionar o arquivo desejado. Já consegui melhorar isso com os scripts desenvolvidos.

intruso disse:

Me parece que você vai rodar esse aplicativo para as suas rotinas de manutenção, então leve em consideração o "principio do menor privilegio".

Sim. Você se refere a privilégios de execução ou acesso?

intruso disse:

Em termos de segurança, deve-se sempre validar os parametros que serão passados ao segundo utilitario, não se deve passar diretamente parametros da interface a outro programa para execução, o aplicativo pode sofrer uma "injeção de argumentos".

A ideia (mais tarde) era obter os argumentos automaticamente, o que eu quero é selecionar o arquivo do banco. Por hora, só eu utilizo a ferramenta, então está ok. Se eu for distribuir, será para outros técnicos.

intruso disse:

Pode parecer besteira, mas, não dá pra usar uma ferramenta nativa da plataforma para executar esses scripts? Você usa Windows Server? Power Shell não resolve?

Uso Windows 7 em meu notebook. Atualmente não rodo na máquina do servidor, realizo uma cópia manual para a minha máquina e realizo este procedimento. Como você mesmo disse, é para a manutenção do arquivo do banco de dados.

Sim, é possível usar ferramentas nativas, como já acontecia. Mas a automatização fica precária. Tenho que ficar editando arquivos bat sempre que vou rodar a rotina de manutenção em um banco (que sempre é diferente).

Só ouvi falar do PowerShell, não sei do que ele é capaz. No primeiro momento, pensei em usar tecnologias que eu já conheço (um pouco) como HTML e Javascript.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#10 Por intruso
19/02/2015 - 16:23
Shura16 disse:
Sim, existe essa possibilidade. Estava pensando em usar o TideSDK para empacotar isso e evitar este tipo de coisa.
Mas no momento não há este problema. O usuário é confiável (eu mesmo big_green.png).

Atualmente, nós editamos diretamente o arquivo bat para selecionar o arquivo desejado. Já consegui melhorar isso com os scripts desenvolvidos.


A regra em segurança é: Nunca confie no usuário. big_green.png (nem em você ou na sua equipe, amanhã você esquece do aniversario de alguem e ele fica com raiva e vai la nas rotinas e toca o barraco)

Shura16 disse:

Sim. Você se refere a privilégios de execução ou acesso?


Nesse caso, geralmente você tem mais permissões envolvidas, usuário que vai acessar o banco de dados e rodar scripts, usuário que roda o service que faz a rotina funcionar, escrita em pastas, etc.

Não rode como administrador, o usuário não precisa ser sysadmin do banco de dados, não rode o bat com a sua conta de usuário, crie um conjunto de contas de serviço e forneça as permissões minimas para cada rotina e aproveite para documentar. Etc, etc etc...

http://www.bspi.pt/notiacutecias/o-princpio-do-privilgio-mnimo-reduza-a-rea-de-ataque

Shura16 disse:

A ideia (mais tarde) era obter os argumentos automaticamente, o que eu quero é selecionar o arquivo do banco. Por hora, só eu utilizo a ferramenta, então está ok. Se eu for distribuir, será para outros técnicos.

Uso Windows 7 em meu notebook. Atualmente não rodo na máquina do servidor, realizo uma cópia manual para a minha máquina e realizo este procedimento. Como você mesmo disse, é para a manutenção do arquivo do banco de dados.



O backup não devia ficar com você, nem na sua maquina, deveria estar em uma unidade de fita ou algo assim ... mas, pra dar algum outro conselho, teria que entender melhor seu ambiente.
Shura16 disse:

Sim, é possível usar ferramentas nativas, como já acontecia. Mas a automatização fica precária. Tenho que ficar editando arquivos bat sempre que vou rodar a rotina de manutenção em um banco (que sempre é diferente).

Só ouvi falar do PowerShell, não sei do que ele é capaz. No primeiro momento, pensei em usar tecnologias que eu já conheço (um pouco) como HTML e Javascript.


Não me entenda mal, não quero acabar com a festa, me parece apenas que você está criando uma ferramenta que não vai usar muito em outros cenários, e que até mesmo certos recursos extras como medir espaço em disco (pra evitar a parada do servidor), uso do processador (pra saber se alguem está rodando o que não deve ou se alguma query esta consumindo muito), uso da memória, etc... podem ser feitos hoje via script ou com o Monitor de performance para saber se vamos ou não ter de intervir no ambiente.

Mas, ai vai do objetivo de cada um, não quero estragar sua festa, mas, a primeira vista, está parecendo mais uma tarefa de infra do que a necessidade de um aplicativo.

Abs.
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#11 Por Shura16
19/02/2015 - 17:09
O que acontece hoje são bat's que realizam o backup e restauram o banco de dados através de utilitários fornecidos pelo SGBD (firebird). Procedimento conhecido como backup & restore.
Tal procedimento corrige várias falhas que ocorrem no banco de dados. E também somente para um backup/cópia quando necessário.

Atualmente, utilizamos bat's que chamam estes utilitários, porém existem as variáveis de realizar determinados procedimentos e do arquivo do banco.
Até o momento, era feito editando os arquivos bat diretamente alterando os parâmetros.

Seria possível chamá-los via linha de comando passando os parâmetros, mas fica um pouco chato ficar navegando até as pastas corretas para executar os comandos. Então pensei em uma interface gráfica para facilitar isso. Normalmente, quando precisamos fazer isso é porque deu censurado.png ou está para acontecer. Então temos pressa.

Uma interface gráfica facilita as coisas nessas horas.

Estava pensando em um script pela facilidade. Eu poderia muito bem compilar um programa em C# ou Java (tenho um pouco de conhecimento para fazer isso) evitando o acesso ao código, mas isso vai dar um pouco mais de trabalho.

Ideal mesmo seria compilar algo em uma linguagem que não precise de frameworks ou runtimes (C# e Java), para então poder distribuir para outros técnicos, mas nesse ponto falta o conhecimento e o tempo.

Sobre a rodar como administrador, não precisa. Apenas preciso de acesso ao arquivo local.

Sobre a festa, já festei bastante! Só de conseguir fazer o script rodar já uma evolução. Como disse, estou pensando em novas funcionalidades e melhorias de segurança. Mas só de ser melhor do que o anterior já está bom.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
jofrelscalvet
jofrelscalve... Veterano Registrado
1.3K Mensagens 51 Curtidas
#12 Por jofrelscalve...
19/02/2015 - 22:22
intruso disse:
Pode parecer besteira, mas, não dá pra usar uma ferramenta nativa da plataforma para executar esses scripts? Você usa Windows Server? Power Shell não resolve?

Shura16 disse:
Só ouvi falar do PowerShell, não sei do que ele é capaz.

Sei que não deve ser exatamente assim, mas eu vejo o Windows shell script, o .hta, o powershell, o VBA, o .NET quase que como plataformas de acesso às APIs do Windows. Muitos problemas podem ser resolvidos de forma quase idêntica em qualquer uma dessas plataformas . Cada uma deve ter seus pontos fortes e fracos, a vantagem do .hta sobre as outras (de acordo com minhas leituras) é apenas na criação de interface.
Minha experiência diz que scripts são adequados onde o importante é o desenvolvimento rápido, mas costumam deixar a desejar em outros quesitos, então quando preciso resolver algo logo às vezes faço scripts quase sem validações (e que às vezes exigem que parte do trabalho seja feito manualmente e/ou usando outra ferramenta), executo-os 1 ou 2 vezes e os substituo por aplicativos "definitivos". Costumo ficar muuuito satisfeito com os resultados ...
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#13 Por intruso
19/02/2015 - 23:41
Shura16 disse:
O que acontece hoje são bat's que realizam o backup e restauram o banco de dados através de utilitários fornecidos pelo SGBD (firebird). Procedimento conhecido como backup & restore.
Tal procedimento corrige várias falhas que ocorrem no banco de dados. E também somente para um backup/cópia quando necessário.

Atualmente, utilizamos bat's que chamam estes utilitários, porém existem as variáveis de realizar determinados procedimentos e do arquivo do banco.
Até o momento, era feito editando os arquivos bat diretamente alterando os parâmetros.

Seria possível chamá-los via linha de comando passando os parâmetros, mas fica um pouco chato ficar navegando até as pastas corretas para executar os comandos. Então pensei em uma interface gráfica para facilitar isso. Normalmente, quando precisamos fazer isso é porque deu censurado.png ou está para acontecer. Então temos pressa.

Uma interface gráfica facilita as coisas nessas horas.


Cara, de boas, não vi ainda o que não pode ser automático frown.png , tenho um cenário onde dou consultoria, temos mais de 13 servidores entre máquinas físicas e virtuais, mais de 6 instancias de banco de dados (SQL, Oracle, MySQL, etc), A unica coisa manual lá e que estamos mudando, é a verificação das rotinas (saber se rodou e homologar).

Shura16 disse:

Estava pensando em um script pela facilidade. Eu poderia muito bem compilar um programa em C# ou Java (tenho um pouco de conhecimento para fazer isso) evitando o acesso ao código, mas isso vai dar um pouco mais de trabalho.

Ideal mesmo seria compilar algo em uma linguagem que não precise de frameworks ou runtimes (C# e Java), para então poder distribuir para outros técnicos, mas nesse ponto falta o conhecimento e o tempo.

Sobre a rodar como administrador, não precisa. Apenas preciso de acesso ao arquivo local.

Sobre a festa, já festei bastante! Só de conseguir fazer o script rodar já uma evolução. Como disse, estou pensando em novas funcionalidades e melhorias de segurança. Mas só de ser melhor do que o anterior já está bom.


Eu uso scripts para automatizar tarefas e se possível onde posso agendar, interface gráfica é mais uma questão de gosto, nas tarefas de manutenção tem muito mais rotina que acontece em background (ao menos nos meus cenários).

jofrelscalvet disse:
Sei que não deve ser exatamente assim, mas eu vejo o Windows shell script, o .hta, o powershell, o VBA, o .NET quase que como plataformas de acesso às APIs do Windows. Muitos problemas podem ser resolvidos de forma quase idêntica em qualquer uma dessas plataformas . Cada uma deve ter seus pontos fortes e fracos, a vantagem do .hta sobre as outras (de acordo com minhas leituras) é apenas na criação de interface.
Minha experiência diz que scripts são adequados onde o importante é o desenvolvimento rápido, mas costumam deixar a desejar em outros quesitos, então quando preciso resolver algo logo às vezes faço scripts quase sem validações (e que às vezes exigem que parte do trabalho seja feito manualmente e/ou usando outra ferramenta), executo-os 1 ou 2 vezes e os substituo por aplicativos "definitivos". Costumo ficar muuuito satisfeito com os resultados ...


Até o VBA eu ainda concordo, .NET é outra história ....
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal