Sysinternals Tools Downloader

Olá,

aqui vai uma das minhas criações rápidas de fim de ano. A primeira versão (preguiçosa) do Sysinternals Tools Downloader - STD.

Eu uso muito as ferramentas da Sysinternals para debugging, troubleshooting e outras tarefas banais, e percebi que sempre perco um certo tempo indo até o site da Sysinternals para baixar o que eu preciso. Pior ainda é quando eu baixo uma das ferramentas, o Autoruns por exemplo, e descubro no meio da análise que preciso de outras, como o Process Explorer, Process Monitor ou TCPView. Isso me faz voltar mais uma vez ao site para baixar o que eu preciso.

Todas as ferramentas da Sysinternals podem ser baixadas em http://live.sysinternals.com. Se você precisar em uma emergência e souber o nome de uma ferramenta específica pode digitar diretamente no Executar: http://live.sysinternals.com/autoruns.exe. Mesmo assim, quis automatizar ainda mais.

image

Se você tiver o wget em algum lugar no seu computador, você pode baixar todas as ferramentas de uma vez em uma pasta. Mais ainda: pode criar um arquivo .CMD para atualizar todas que tiverem sido atualizadas desde a última vez.

c:\tools\wget.exe -r -l 1 -nH -v -N -P c:\tools\sysinternals http://live.sysinternals.com

Se você não tem o wget para Windows no computador, baixe-o aqui. Dentro do ZIP basta pegar o arquivo bin\wget.exe e colocar em alguma pasta local.

Como funciona:

  • -r -l 1 - Baixa todos os arquivos recursivamente, descendo no máximo um nível.
  • -nH - não copia os nomes das pastas do servidor
  • -v - Exibe o log detalhado das operações na tela
  • -N - baixa somente os arquivos mais novos do servidor.
  • -P sysinternals - baixa todos os arquivos na pasta c:\tools\sysinternals

Se quiser, salve a linha acima em um arquivo .CMD para facilitar.

Porque preguiçosa? A próxima vez eu mando uma versão PowerShell-only do mesmo comando. Usando o WGET fica muito fácil.

Até a próxima e feliz natal!

Categorias dessa postagem:

NET TIME vs w32time: Onde começar

Olá,

faz tempo que eu não faço barulho por aqui. Hoje vai uma dica legal.

Se você um dia tiver problemas de sincronização de relógios dos computadores em um domínio (em VM ou não) leia alguns dos artigos (eu fiz questão de ler todos) sobre o serviço w32time no blog do time que criou o serviço:

http://blogs.msdn.com/w32time/

O blog descreve, dentre outras coisas, como o serviço funciona e porque o NET TIME /SET não é necessário em nenhum script de logon (argh!).

Até mais,

Vinicius

PS: pra quem não entendeu o recado, o NET TIME não deve ser usado em scripts de logon. Não há necessidade de usá-lo se você estiver em um domínio. Quem ficar na dúvida, leia atentamente o post sobre NET TIME e os primeiros posts sobre o w32time.

Categorias dessa postagem:

Layout temporário...

Olá, por conta de problemas no servidor que eu armazenava as imagens do blog eu decidi por criar um novo layout. O problema é que eu acabei nunca terminando esse novo layout e simplesmente parei de postar minhas dicas por aqui por não ter mais um layout decente... Pois bem, criei coragem hoje e escolhi um layout simples do Blogger mesmo só para continuar postando. Em breve teremos os truques que fui escrevendo nos últimos 3 meses =) Um abraço a todos!

Categorias dessa postagem:

Mover o local padrão dos computadores adicionados ao domínio

Um grande amigo meu (aka Wesley Fernandes) postou em seu blog algo que é bastante útil: como mover o local padrão dos computadores adicionados ao domínio.

Veja como fazer isso e porque isso é útil direto no blog dele: http://wesleey.spaces.live.com/Blog/cns!CA741617C72DF644!477.entry

=)

Até mais!

Categorias dessa postagem:

OFF: Faculdade?

Recentemente o Fábio Akita publicou em seu blog o que ele pensa sobre ter ou não um diploma universitário. Eu li e gostei. Recomendo a leitura para quem tem essa dúvida na cabeça.

http://www.akitaonrails.com/2009/04/17/off-topic-devo-fazer-faculdade

Até logo!

Categorias dessa postagem: ,

Gravações do Live Meeting 2007

Olá,

hoje tive um problema curioso para resolver. Fiz uma apresentação no Live Meeting, gravei, mas não consigo reproduzir nada.

Depois de algum tempo investigando o que o LM gerou, constatei que ele separou o audio do video e não gravou os PPTs, gravando somente as demonstrações. Com isso ele consegue economizar espaço em disco.

Bastante útil. Mas não serve para o que eu preciso. Precisava de um único arquivo de video, para publicar internamente para outros colegas. Como se não bastasse, não consigo abrir na minha máquina os videos gerados. Quando tento abrir no Windows Media Player, vejo a mensagem a seguir:

Windows Media Player Error Message Help
You’ve encountered error message C00D10D1 while using Windows Media Player. The following information might help you troubleshoot the issue.

Codec is missing
Windows Media Player cannot play the file (or cannot play either the audio or video portion of the file) because the MSA1 codec is not installed on your computer.

The missing codec might be available to download from the Internet. To search for the MSA1 codec, see WMPlugins.com.

E no VLC Player:

Não foi encontrado um módulo decodificador adequado:

O VLC provavelmente não tem suporte ao formato de vídeo ou de áudio "MSA1". Infelizmente não existe uma forma de corrigir isso.

e

main error: no suitable decoder module for fourcc `MSA1'.

VLC probably does not support this sound or video format.

Depois de alguma busca, descobri que meu SO atual (uma edição do Windows x64) não possui o codec para filmes do LM, o MSA1. Mais alguns minutos e descobri que é possível converter ele com o Windows Media Encoder. Mais informações aqui.

Próximo passo: como converter 16 videos rapidamente, de uma só vez? Script? =D

Até mais!

Categorias dessa postagem: ,

Problemas com o RegWrite

Olá,

acabei de responder uma pergunta capisciosa no forum sobre o método RegWrite. O usuário queria criar um valor no registro com um backslash (também conhecido como barra invertida: \  )  no nome.

Resposta rápida: não dá. Não com o RegWrite. Saídas rápidas: Classe StdRegProv do WMI, PowerShell, escrever um .REG e executar silenciosamente.

Triste, mas não tem como mesmo. Limitação documentada do RegWrite no artigo http://support.microsoft.com/default.aspx/kb/281309

A razão é simples: o próprio RegWrite usa a \ para separar chaves no registro. Bastava considerar duas barras seguidas como escape, mas isso não foi feito. =(

Até a próxima!

Categorias dessa postagem: ,

Hotfix para horário de verão

Olá,

o horário de verão no Brasil termina neste dia 15 de fevereiro, e a Microsoft colocou mais um hotfix a disposição.

Como eu disse no artigo (http://viniciuscanto.blogspot.com/2008/08/script-para-horrio-de-verao-20082009.html), a Microsoft já havia divulgado um hotfix para corrigir a data de entrada e saída do horário de verão. No entanto, mesmo o hotfix tinha problemas. Ele configurava datas de saída diferentes para Vista/2008 e XP/2003, sendo 23h59 do segundo sábado de fevereiro e 00h00 do terceiro domingo de fevereiro, respectivamente. Embora pareça bobeira minha, isso não é tão trivial. Em 2009, não há problema. Em 2010, o segundo sábado não vem imediatamente antes do terceiro domingo no mês de Fevereiro, o que causará um problema nos compromissos marcados naquela semana de 2010.

Como o governo brasileiro anunciou que não usará mais o modelo dinâmico (apenas quando bater com o carnaval… ou seja, ainda é dinâmico), há grandes chances desse problema passar despercebido em 2010 e a MS não lançar nenhum patch.

O fix que foi lançado corrige este problema, e está disponível em (http://support.microsoft.com/default.aspx/kb/960445). Não testei todos os SOs ainda para garantir que o hotfix funciona corretamente… faça testes com os SOs da sua rede antes de instalar em todos.

Até logo,

Vinicius

Categorias dessa postagem:

Nota sobre a “falha” descoberta por Long Zhou sobre o UAC do Windows 7

Primeiramente, sugiro ler um pouco sobre a falha: http://www.istartedsomething.com/20090130/uac-security-flaw-windows-7-beta-proof/.

Agora, minhas considerações:

  • Windows 7 ainda é BETA. Mesmo com um won’t fix, a MS pode muito bem alterar o comportamento padrão do UAC na versão final.
  • Não se trata de uma falha de segurança. Como pode ser notado no terceiro comentário no blog do Long Zhou, essa “falha” só ocorre em usuários que pertençam ao grupo Administrators. Obviamente, usuários nesse grupo podem fazer qualquer coisa no computador. Seguro mesmo é usar o UAC com usuários non-admins, como substituição para o RunAs.
  • O “script” de Zhou simula digitação no teclado. Isso é bem simples de se contornar. Arquivos .VBS e .EXE vindos por e-mail, por exemplo, precisam de confirmação extra para serem executados. Pelo registro, diretamente, o UAC não pode ser alterado. Remotamente, só se o usuário (remoto) tiver credenciais fortes para alterar o registro (psexec + reg add).
  • Em empresas isso não deve ser um problema, já que normalmente as contas de admin local são de uso restrito da área de suporte/administração de sistemas. Quem não está assim hoje, deveria estar.
  • Mesmo com o barulho todo, concordo em parte com o que Zhou sugere. A configuração padrão atual não ajuda, já que o primeiro usuário logo após a instalação é um administrador (provavelmente por motivos de compatibilidade com sistemas antigos). O UAC então pode ser desativado por ele sem popups. Minha sugestão vai além: exigir a senha do admin na instalação, não bloquear a conta, e liberar por padrão a conta do usuário comum. Um papel de parede padrão com um aviso em vermelho bem grande também poderia intimidar alguns usuários desavisados. Só assim para fazer os usuários finais (pense num usuário sem experiência, com experiência pequena ou intermediária) usarem contas de usuário da forma correta.
  • A mídia brasileira continua sendo uma verdadeira piada no que diz respeito ao assunto Informática. Notícias como essa (http://olhardigital.uol.com.br/digital_news/noticia.php?id_conteudo=7381), sem nenhuma análise técnica mais profunda, são publicados diariamente. Não deve existir nenhuma matéria sobre Segurança em cursos de Jornalismo, e vários jornalistas simplesmente escrevem o que canais internacionais publicam. Lamentável.

Bom, é isso. O script do Zhou está logo abaixo. Bom, não? ;-)

'// 1337H4x Written by _____________ 
'//                    (12 year old)

Set WshShell = WScript.CreateObject("WScript.Shell")

'// Toggle Start menu
WshShell.SendKeys("^{ESC}")
WScript.Sleep(500)

'// Search for UAC applet
WshShell.SendKeys("change uac")
WScript.Sleep(2000)

'// Open the applet (assuming second result)
WshShell.SendKeys("{DOWN}")
WshShell.SendKeys("{DOWN}")
WshShell.SendKeys("{ENTER}")
WScript.Sleep(2000)

'// Set UAC level to lowest (assuming out-of-box Default setting)
WshShell.SendKeys("{TAB}")
WshShell.SendKeys("{DOWN}")
WshShell.SendKeys("{DOWN}")
WshShell.SendKeys("{DOWN}")

'// Save our changes
WshShell.SendKeys("{TAB}")
WshShell.SendKeys("{ENTER}")

'// TODO: Add code to handle installation of rebound
'// process to continue exploitation, i.e. place something
'// evil in Startup folder

'// Reboot the system
'// WshShell.Run "shutdown /r /f"

Categorias dessa postagem: ,

Páginas Web e Registro do Windows?

Mais uma dúvida comum sobre scripting e Windows Script Host:

Olá Vinicius,

E tenho uma dúvida muito rápida sobre o objeto WshShell do .NET Framework 3.0. Caso você possa me ajudar, lhe serei muito grato:
1. Posso colocar em uma página html do meu website, e incluir um javascript nesta página, para que um usuário do meu site navegando por esta página, e sem qualquer permissão (adicional para executar scripts ou coisa parecida) posso passar a ler informações do registro do windows como por exemplo a quantidade dos dispositivos USB conectados na máquina dele:
var shell = new ActiveXObject("WScript.Shell"); 
var path = "HKLM\\System\\CurrentControlSet\\Services\\USBSTOR\\Enum\\";
var scount = shell.RegRead(path+"Count");
2. Caso a afirmação acima seja positiva, é possível ler quais são os arquivos em um diretório específico e ter uma lista dos nomes dos arquivos que lá estão a partir do mesmo WshShell?
Obrigado e abraços, 

E, é claro, a resposta:

Olá Fernando,
infelizmente, isso não será possível. Veja os comentários a seguir:
1) O WshShell não pertence ao .Net Framework. Ele faz parte do Windows Script Host Object Model. São coisas beeeeeeem diferentes.
2) Não é possível utilizar esse tipo de controle ActiveX em uma página Web comum com as configurações padrão do IE. Isso significa que, se funcionar, seu sistema só vai rodar em IEs cujos donos configurem explicitamente para permitir esse tipo de acesso. Não vejo muita gente fazendo isso não, mesmo em intranets, devido ao alto risco de segurança que essa alteração representa.
3) Para ler arquivos com o WSH, você precisa antes descobrir qual letra de unidade está sendo utilizada para o pendrive.
[]s,
Vinicius

Normalmente, o uso de Javascript é restrito dentro do navegador. Essa é a configuração padrão, por motivos de segurança. Entretanto, as permissões de arquivos .HTA são menos restritivas, o que permite desenvolver pequenas interfaces administrativas para uso dentro das empresas. Bons exemplos são os instaladores do SQL, ISA e Exchange, cuja tela inicial é um simples .HTA.

Até a próxima!

PS: vou continuar a série sobre como renomear computadores do AD mais tarde =)

Categorias dessa postagem: ,

Renomeando computadores – Parte 1

Olá,

mais uma dúvida curiosa: como renomear vários computadores de uma só vez?

Vinicius,

Olá amigo, sei da sua experiência com script’s pois já utilizei vários feito por você.

Estou com um problema: tenho em torno de 80 maquinas e preciso mudar o nome delas. Eu já tenho uma planilha com o nome que vai ficar cada uma e quem é o usuários.

Queria criar um script para mudar o nome da máquina e coloco na inicialização do usuário. Assim quando o usuário se conectar o código já muda o nome da máquina sozinho.

Lembrando que o usuário não é administrador da máquina.

Agradeço a ajuda.

<nome>

Analista de Sistemas

E minha resposta:

Olá,

Se o usuário não é o administrador da máquina, é simplesmente impossível mudar durante o logon. Seria possível durante o startup, mas se você tivesse uma lista de nomes de máquina novos e nomes de máquina antigos ao invés do nome do usuário.

[]s,

Ele então conseguiu os nomes dos computadores. Nos próximos artigos vou mostrar diversas formas de se renomear computadores por script.

Até logo!

Categorias dessa postagem:

Drivers bluetooth para Windows 2008

Olá,

continuando minha saga com drivers bluetooth no Windows 2008, iniciada neste post.

Encontrei mais um link de um usuário que modificou os drivers do Vista para rodar no 2008. A diferença é que nesse link também está disponível o download para Windows 2008 x86.

http://blog.komeil.com/2008/11/installing-microsoft-bluetooth-stack-on.html

Até mais!

Categorias dessa postagem:

Script para determinar número de cópias de um job de impressão

Olá,

frequentemente eu recebo problemas por email para responder. Eu prometo responder na medida do possível (sempre que sobra um tempo, afinal de contas, isso é suporte gratuito =), e quase que sempre eu atraso, com uma ou duas semanas de diferença… mas procuro responder dúvidas das pessoas, mesmo no meu email pessoal.

Para resolver esse problema, estou criando um sistema para envio de dúvidas. Isso vai desafogar meu email (afinal de contas, é um email pessoal =) e agilizar o processo de resposta. Fica mais fácil pra selecionar as melhores dúvidas e colocar aqui. Além disso, é melhor pras próprias pessoas que perguntam, já que elas vão poder verificar nas dúvidas das outras pessoas. Meu blog vai ser reformulado logo logo… aguardem!

Alguns dias atrás recebi a seguinte dúvida:

Oi vinicius, blz

Vc ja me ajudou antes, em várias situações, mais estou aqui novamente te pedindo ajuda..

To precisando de um script vbs, que gere o numero de copias de uma determinada impressora.

Encontrei este script,

' Monitor Print Job Status
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs =  objWMIService.ExecQuery _
    ("Select * from Win32_PrintJob")

Wscript.Echo "Print Queue, Job ID, Owner, Total Pages"

For Each objPrintJob in colPrintJobs
    strPrinter = Split(objPrintJob.Name,",",-1,1)
    Wscript.Echo strPrinter(0) & ", " & _
        objPrintJob.JobID & ", " &  objPrintJob.Owner & ", " _
            & objPrintJob.TotalPages
Next

No entanto o mesmo informa o total de paginas, mas preciso do numero de copias.

ex. um documeto com 6 paginas ele informa.
mas se mandar emprimir 2 copias deste determinado documento ele não informa (ex. 12)

deste ja agradeço
<nome>

O problema me intrigou um bocado. Gostei disso e fui atrás para ajudar o cara. Vejam minha conclusão:

Olá <nome>,

até onde eu vi (http://msdn.microsoft.com/en-us/library/aa394370(VS.85).aspx)  o WMI não possui nenhuma propriedade com o número de cópias. Por outro lado, faz até sentido: o subsistema de impressão do Windows não deve ter controle sobre cópias, já que o que chega pra ele são somente jobs. Tudo que ele sabe é quantas folhas são, de onde veio, pra onde vai, e quantas foram impressas... o conteúdo fica a cargo da aplicação.

Em resumo: a princípio, do ponto de vista do SO, não dá... quem deve ter controle sobre o número de cópias é o programa que pede pra imprimir um documento.

[]s,

Vinicius

Obrigado pela dúvida e até a próxima!

Categorias dessa postagem: , ,

Github e _vimrc

Olá,

acabei de fazer uma boa ação para a (comu|humani)dade. Tomei vergonha na cara, criei uma conta no github, aprendi a usar git e coloquei meu _vimrc lá.

Pra quem não sabe, o github é uma espécie de rede social misturada com um sistema de controle de versão muito bom, o Git. É gratuito, basta se cadastrar e usar o repositório online. Bastante útil para colocar aquele projeto que você criou tempos atrás e é super útil para outras pessoas. Pretendo colocar meus scripts por lá também, para quem quiser baixar. Na verdade, minha idéia mesmo é começar a controlar minhas criações entre as máquinas do cliente que presto serviço atualmente, do notebook da empresa e da minha máquina pessoal. =)

Pra quem quiser ver como anda meu arquivo _vimrc (principal arquivo de configuração do Vim) atualmente, segue aqui o link do meu repositório lá. Aproveitei e coloquei também os plugins que eu uso (Syntax Highlight do PowerShell, SnippetsEmu e, mais recentemente, FuzzyFinder). Todos eles podem ser encontrados facilmente no www.vim.org

http://github.com/vcx/vimfiles/tree

Futuramente, meus projetos pessoais ficarão todos em http://github.com/vcx

Até a próxima!

Categorias dessa postagem:

VM Guest x64 em Host 32 bits

Olá

mais uma pra começar bem o ano: o pessoal da Innotek (oops, agora parte da Sun) liberou, quase que silenciosamente, a versão 2.1.0 do VirtualBox, para Windows, Linux, Mac e Solaris. Até aí, parece uma notícia comum de algum fanboy postando no Digg. O que chama a atenção mesmo são os recursos novos dessa versão:

  • Suporte à VMs guest 64 bits, mesmo quando o SO host é 32 bits. Basta ter um processador compatível (x64) e que tenha suporte à virtualização por hardware (VT-x ou AMD-V)
  • Suporte a discos .VHD diferenciais. (foi lançado, mas não funciona direito ainda. A versão que está no CVS foi corrigida, e a 2.1.1 deve ser lançada em breve com a correção. Quem quiser compilar na mão já pode usar VHDs normalmente no Vbox)
  • Suporte a aceleração gráfica via OpenGL na versão Windows. Sim, já dá pra jogar dentro de VMs. O Suporte ao DirectX deve sair em breve também.
  • Suporte à rede melhorado no Windows. Agora não é necessário mais configurar uma placa virtual no host e fazer compartilhamento da rede manualmente. Funciona mais rápido e tão simples quanto o VirtualPC.
  • Agora é possível usar o mesmo disco em mais de uma máquina virtual (útil para cenários de preparação de imagens, por exemplo)
  • Suporte à segunda geração de virtualização por hardware (Enhanced Nested Paging) em processadores Nehalem da Intel. Isso promete acelerar bastante as VMs, mas só está disponível nos processadores lançados no final de 2008 ou posteriores.
  • Vários pequenos bugs corrigidos, dentre eles o que impedia o uso de Windows 2008 x64 como OS guest.

Enfim. VBox é uma boa opção pra quem quiser testar VMs x64 sem ter que reinstalar o SO Host.

Até logo!

Categorias dessa postagem:

Bluetooth no Windows Server 2008

Olá,

para começar bem o ano, uma dica importante para os Windows Truly Power Users. Sim, essa dica vai para os verdadeiros usuários avançados do Windows que conhecem bem o sistema que usam, e não apenas aqueles que usam o sistema operacional simplesmente porque veio com o computador e é bem mais fácil de usar do que os concorrentes.

Quem usa bem o Windows acaba preferindo o Windows Server como sistema operacional para uso do dia-a-dia, justamente pelos recursos avançados que ele oferece (Terminal Services, Hyper-V, IIS de verdade, etc.).

Trocar o XP pelo Windows Server 2003 era relativamente simples, já que poucos recursos do XP não estavam disponíveis na versão server. Boa parte deles podia ser habilitada facilmente editando somente uma chave de registro ou alterando uma diretiva de grupo local. Migrar do Windows Vista para o Windows Server 2008 não é tão natural, já que até mesmo recursos básicos como um MP3 Player ou acesso à rede via wi-fi não estão disponíveis por padrão e precisam ser instalados separadamente. Pior: alguns recursos simplesmente não estão disponíveis nem mesmo como componentes opcionais, como é o caso do suporte a dispositivos Bluetooth.

Hoje consegui finalmente instalar o Bluetooth completamente no Windows 2008. Neste caso, completamente significa Bluetooth com AD2P, Rede PAN, ActiveSync, HID, etc… tudo. O segredo sempre foi bem simples: usar os drivers do Vista. No caso do 32 bit é tranquilo… mas no x64, foi necessário ainda seguir um procedimento a parte. Felizmente, encontrei na Internet, no site harbar.net (que é de um MVP!), um arquivo .ZIP com os arquivos já modificados para x64, o que facilita bastante o processo. Basta então descompactar e instalar os drivers manualmente. Obviamente, a assinatura dos drivers não bate, e você deve confirmar que deseja instalar drivers não assinados por sua conta e risco.

http://www.harbar.net/archive/2008/06/13/Enabling-Bluetooth-on-MacBook-Pro-and-Windows-Server-2008-x64.aspx

se você estiver tentando usar o Windows Server 2008 e encontrar problemas com algum recurso, procure no www.win2008workstation.com

Have fun!

Categorias dessa postagem: