Consultório: Ao aceder uma biblioteca surge a mensagem “Documents.library-ms deixou de funcionar”

Ao tentar aceder a uma biblioteca corrompida é apresentada a seguinte mensagem de erro:

“Documents.library-ms deixou de funcionar” (“Documents.library-ms não está mais funcionando” em Português do Brasil ou “Documents.library-ms is no longer working” em Inglês)

Figura 1 – Mensagem de erro Documents.library-ms num Windows 7

Uma vez que uma biblioteca não é mais do que um apontador para uma ou mais localizações, a solução passa por eliminar as bibliotecas e recriar novamente as mesmas.

Os passos em detalhe são os seguintes:

1 – No explorador do Windows, clicar com o botão direito do rato na biblioteca “Documentos” que se encontra no painel de navegação (lado esquerdo da janela) e escolher a opção de contexto “Eliminar” conforme figura 2

image

Figura 2 – Opção de contexto para eliminar uma biblioteca no Windows 8.1

2 – Repetir o passo anterior para todas as bibliotecas do Windows (tipicamente “Documentos”, “Imagens”, “Músicas”, “Podcasts”, “Vídeos”)

3 – Uma vez eliminadas todas as bibliotecas, clicar com o botão direito do rato em “Bibliotecas” e escolher a opção de contexto “Restaurar bibliotecas predefinidas” conforme figura 3

image

Figura 3 – Opção de contexto no Windows 8.1 para Restaurar bibliotecas predefinidas

4 – Se no painel de navegação não estiverem a ser apresentadas as bibliotecas, deverá aceder ao friso “Ver”, expandir a lista “Painel de navegação” e escolher a opção “Mostrar bibliotecas”

image

Figura 4 – Configurar o painel de navegação para apresentar as bibliotecas

Recursos adicionais:

Artigo técnico “Opening a Library in Windows Explorer gives error that it is no longer working”: http://support.microsoft.com/kb/2895090

Página dedicada à funcionalidade “Bibliotecas”: http://windows.microsoft.com/pt-pt/windows7/products/features/libraries

Como iniciar duas sessões de Skype na mesma máquina

Com o advento do fim do Messenger (aplicação e serviço) e com a Microsoft a querer que o Skype seja a plataforma de mensagens instantâneas por excelência a ser usada pelos utilizadores domésticos e empresariais (para comunicações fora da firewall), torna-se comum que um indivíduo possua mais do que uma identidade no Skype: tipicamente uma conta Skype para os amigos e família e uma outra conta exclusiva a fins profissionais.

Por omissão o Skype só permite identificar-mo-nos com uma conta de cada vez, ou seja, se entrarmos com a conta “profissional” só vemos os contatos agregados a essa conta e se entrarmos com a conta “pessoal” só vemos, como seria de esperar, os contatos pessoais.

Neste artigo vou explicar, passo-a-passo, como é que se pode ter duas instâncias de Skype iniciadas no mesmo computador mas com contas diferentes.

 

Objetivo: Criar um atalho para a aplicação Skype

1 – Clicar com o botão direito do rato no ambiente de trabalho e escolher a opção de contexto “Novo” | “Atalho”

2 – Na janela “Atalho” clicar em “Procurar…”

3 – Na janela “Procurar Ficheiros ou Pastas” indicar a localização do executável Skype.exe (tipicamente o caminho é “C:\Program Files (x86)\Skype\Phone”)

image

4 – Clicar em “Seguinte”

5 – No ecrã “Que nome deseja atribuir ao atalho” escrever “Skype – Profissional”

6 – Clicar em “Concluir”

Neste momento acabamos de criar um atalho para o Skype com o nome “Skype Profissional”

image

 

Objetivo: Criar uma cópia do atalho Skype

1 – Clicar com o botão direito do rato no atalho criado e escolher a opção de contexto “Copiar”

2 – Clicar com o botão direito do rato no ambiente de trabalho e escolher a opção de contexto “Colar”

3 – Clicar com o botão direito do rato no atalho acabado de criar e escolher a opção de contexto “Mudar o nome”

4 – Alterar o texto para “Skype – Pessoal”

image

 

Objetivo: Adicionar o parâmetro “/Secondary” ao atalho do Skype Pessoal

1 – Clicar com o botão direito do rato no atalho “Skype – Pessoal” e escolher a opção de contexto “Propriedades”

2 – Na janela “Propriedade de Skype – Pessoal” adicionar no final do texto que se encontra no campo “Destino” o parâmetro “/Secondary”

image

("C:\Program Files (x86)\Skype\Phone\Skype.exe" /Secondary)

3 – Clicar em “OK” para gravar as alterações

 

Objetivo: Validar as configurações

1 – Efetuar um duplo clique em “Skype – Profissional” e especificar as credenciais da conta profissional

2 – Efetuar um duplo clique em “Skype – Pessoal” e especificar as credenciais da conta pessoal

 

E já está: duas instâncias de Skype com credenciais diferentes!

 

duas instâncias skype

 

Recursos adicionais:

Página oficial do Skype

http://www.skype.com/intl/pt/home

Como determinar qual é o controlador que está a provocar instabilidade

Sempre que ocorre um erro grave no núcleo do sistema operativo e o mesmo não consegue recuperar a estabilidade é apresentado o famoso Ecrã Azul da Morte (Blue Screen of Death em Inglês).

Parte significativa destes erros são provocados por controladores mal comportados que estão a ser executados ao nível do núcleo e a sua instabilidade acaba por se propagar ao núcleo do sistema operativo levando-o a deixar de conseguir responder de forma ordeira e controlada.

Apesar de a partir do Windows XP terem sido incluídos mecanismos que previnem que um utilizador instale sem querer um controlador não testado e/ou não assinado, a verdade é que os utilizadores finais ignoram os avisos e acabam por cometer este erro.

O objetivo deste artigo é documentar um método que pode ser usado para determinar quais são os controladores que não cumprem os requisitos e que podem estar a provocar instabilidade ao sistema operativo.

 

 

Conhecer os diversos tipos de controladores

Sempre que um fabricante cria um controlador para um dispositivo o mesmo tem de passar pelos testes de qualidade (WHQL).

Quando o mesmo não passa nos testes ou não é submetido para testes, este controlador não pode:

  • Não pode ser distribuído pelo Windows Update;
  • Não pode constar da lista de controladores suportados;
  • Não pode usar  o logótipo de certificado;
  • O processo de instalação vai despoletar um alerta para o utilizador;
  • Dependendo da forma como o sistema operativo se encontra configurado, pode a instalação do mesmo ser impedida de forma automática.

Submeter todos os controladores para certificação é uma tarefa morosa e dispendiosa, por isso é usual os fabricantes apresentarem nos seus portais de internet controladores certificados (WHQL), controladores finalizados mas não certificados e controladores não finalizados (em fase de testes ou em fase beta).

image

Quando se trata de estabilidade os controladores certificados são aqueles que mais garantias oferecem, por isso, devem ser aqueles os escolhidos.

Existem ainda alguns fabricantes que por questões de investimento optam por não adaptar os seus controladores às novas versões do sistema operativo, fazendo com que os utilizadores tenham de instalar versões “antigas” e não “afinadas” à nova versão. Este tipo de situações pode dar origem a instabilidade pois todo o software precisa de ser atualizado e adequado à evolução natural da tecnologia. É frequente observarmos este comportamento no mundo dos periféricos, nomeadamente impressoras.

 

 

Como obter uma lista de controladores antigos e ou não assinados

O utilitário “Verifier” (Gestor de verificador de controladores) tem a capacidade de listar os controladores instalados, mostrar se os mesmos foram ou não desenvolvidos para este sistema operativo e tem a capacidade de executar uma série de testes sobre os mesmos para validar a sua robustez.

Este utilitário é gratuito, encontra-se disponível em todas as versões e edições do Windows desde o Windows XP e é possível operar o mesmo através da linha de comandos ou através de um interface gráfico.

Para se obter uma lista de controladores instalados, basta efetuar os seguintes passos:

  1. Executar executar o comando “Verifier” (com privilégios de administração)
  2. No ecrã inicial escolher a opção “Criar definições padrão”
  3. Clicar em “Seguinte”
  4. No ecrã “Seleccionar quais os controladores a verificar” escolher a opção “Seleccionar nomes de controladores de uma lista”
  5. Clicar em “Seguinte”

Neste ecrã para além do nome físico do controlador, é apresentada a informação do fornecedor e a versão. Na coluna versão é possível observar se o controlador foi ou não desenvolvido para esta versão do Windows ou para uma versão anterior.

image

Para se obter uma lista de controladores não assinados, os passos a efetuar são os seguintes:

  1. Executar executar o comando “Verifier” (com privilégios de administração)
  2. No ecrã inicial escolher a opção “Criar definições padrão”
  3. Clicar em “Seguinte”
  4. No ecrã “Seleccionar quais os controladores a verificar” escolher a opção “Seleccionar automaticamente controladores não assinados”
  5. Clicar em “Seguinte”

Neste ecrã são apresentados os controladores que não se encontram assinados digitalmente, ou seja, controladores que não foram submetidos para controlo do Windows Hardware Quality Labs.

image

 

 

Como testar um controlador

Através deste utilitário é possível efetuar uma bateria de testes aos controladores que quisermos. Na eventualidade de estarmos perante a análise de um BSDO, devemos começar a nossa investigação pelos controladores não assinados e só depois passarmos para os controladores não desenvolvidos para a versão atual do sistema operativo.

O processo de lançamento de testes é simples:

  1. Através do utilitário “Verifier” assinalar o(s) controlador(es) que se pretende testar
  2. Reiniciar o computador

No arranque do computador e sempre que o controlador seja evocado pelo sistema operativo serão efetuados testes. Se voltar a ocorrer um ecrã azul, podemos, para além de analisar o registo de erros, assumir que o controlador em falta é aquele em específico que pedimos para testar.

É importante mencionar que estes testes serão constantemente efetuados até que o utilizador especifique que já não pretende efetua-los. Para desativar a opção de verificação, é necessário efetuar o seguinte:

  1. Executar o comando “Verifier”
  2. No ecrã principal escolher a opção “Eliminar definições existentes”
  3. Reiniciar o computador

ou em alternativa, na linha de comandos executar:

  1. verifier /reset
  2. E reiniciar o computador

image

 

 

Recursos adicionais:

Página oficial “Windows Logo Kit”

http://msdn.microsoft.com/en-us/windows/hardware/gg487530.aspx

Centro de compatibilidade do Windows 7

http://www.microsoft.com/windows/compatibility/windows-7/pt-br/default.aspx

Artigo técnico de como usar o Gestor de verificador de controladores

http://support.microsoft.com/kb/244617

Interromper a execução por um determinado período de tempo

É frequente na construção de scripts termos a necessidade de induzir demora na execução de comandos por forma a termos a certeza que os mesmos foram concluídos com sucesso ou simplesmente dar a oportunidade ao utilizador de analisar/observar a execução do comando.

O objetivo deste artigo é mostrar os diferentes métodos de que o Windows dispõe para interromper, por um determinado período de tempo, a execução de um comando.

Lista de comandos passíveis de serem usadas para induzir paragem:

  • PAUSE
  • CHOICE
  • WAITFOR
  • TIMEOUT
  • PING
  • START /WAIT
  • Start-Sleep
  • WScript.Sleep

 

 

PAUSE

O comando PAUSE suspende o processamento de um programa batch e apresenta a mensagem “Prima qualquer tecla para continuar…”. Enquanto o operador não pressionar qualquer tecla a execução da batch não prossegue.

Exemplo #1:

PAUSE

image

 

 

CHOICE

O comando CHOICE permite que seja apresentada ao utilizador um conjunto de opções. Pode usar-se esta necessidade de interatividade com o operador para induzir uma paragem no processamento.

Exemplo #1

(Aguarda por tempo indeterminado que o utilizador escolha uma opção)

CHOICE /C SNC /M "Prima S para Sim, N para Não ou C para Cancelar."

Exemplo #2

(Aguarda que o utilizador escolha no espaço de 10 segundos uma opção. Se não escolher qualquer opção será assumido automaticamente o “S”)

CHOICE /T 10 /C SNC /CS /D S

image

 

 

WAITFOR

Este comando envia ou aguarda por um sinal do sistema. Podemos usar este comando de diferentes formas:

Exemplo #1

(Aguarda 10 segundos pela receção do sinal “Teste”)~

WAITFOR Teste /T 10

Exemplo #2

(Aguarda por tempo indeterminado a receção do sinal “Teste”)

Na máquina A executar:

WAITFOR Teste

Na máquina B executar

WAITFOR /SI Teste

image

 

 

TIMEOUT

O comando TIMEOUT induz uma paragem na execução de comandos por um determinado período de tempo, período esse que pode ser infinito.

Exemplo #1

(Aguarda 10 segundos e apresenta um contador regressivo)

TIMEOUT /T 10

Exemplo #2

(Aguarda por tempo indeterminado até que o utilizado pressione qualquer tecla)

TIMEOUT /T –1

Exemplo #3

(Aguarda 10 segundos e ignora qualquer tecla pressionada pelo utilizador)

TIMEOUT /T 10 /NOBREAK

image

 

PING

Este comando apesar de não ser um comando de interrupção pode usar-se para provocar atraso, isto é, parte-se do principio que o tempo de reposta do comando é de 1 segundo e pode desta forma manipular-se o atraso pretendido.

Exemplo #1

(Aguarda 10 segundos)

ping -n 10 127.0.0.1

#Exemplo #2

(Idêntico ao anterior mas com supressão do resultado de saída)

ping -n 10 127.0.0.1 > NUL

image

 

START /WAIT

Este método não é propriamente uma função de interrupção mas sim uma funcionalidade do comando START que permite que os comandos sejam interrompidos até que a nova janela termine a execução

Exemplo #1

(Aguarda que o comando ping seja terminado)

START /WAIT ping 127.0.0.1

image

 

Start-Sleep

Este comando é nativo do PowerShell por isso a sua execução requer este ambiente. A sintaxe é simples e permite especificar o tempo de interrupção pretendido.

Exemplo #1

(Aguarda 10 segundos)

Start-Sleep 10

image

 

 

WScript.Sleep

Este comando é nativo do Windows Script Host por isso a sua execução envolve a execução do motor de interpretação desta linguagem de scripting. No exemplo abaixo vou mostrar como é que se pode usar provocar atraso usando apenas uma linha de comando

Exemplo #1 (Cria um ficheiro vbs e executa a instrução de interrupção de 10 segundos)

ECHO WScript.sleep 10000 > temp.vbs && cscript temp.vbs

image

 

Conhecem mais métodos ou usam outras técnicas para induzir demora ou interrupção nos scripts? Partilhem o vosso conhecimento preenchendo a caixa de comentários.

Como obter a chave de produto do Windows

Recentemente tive a necessidade de conseguir saber qual foi a chave de produto (Product Key) usada na instalação do Windows. Esta situação foi provocada pela necessidade de reinstalar o sistema operativo e o dono do computador não se lembrar onde a tinha guardado. Apesar de se poder instalar o Windows 7 sem especificar a chave, o mesmo não se aplica à ativação do mesmo, logo teria de aproveitar o facto do sistema operativo ainda funcionar para conseguir saber qual foi a chave usada no momento da instalação.

É verdade que existem muitas aplicações no mercado que resolvem esta situação, mas o objetivo deste artigo é mostrar como é que se consegue obter esta informação usando apenas os recursos que já se encontram disponíveis no sistema operativo.

A chave de produto do Windows está armazenada numa entrada do registo de forma encriptada. A cifra usada é publica e encontra-se documentada no portal da Microsoft.

 

Instruções:

1 – Clicar em “Iniciar” e escrever “PowerShell ISE”

2 – No editor PowerShell colar o seguinte código:

 

 

function Get-WindowsKey


   
param ($targets = ".")
    $hklm = 2147483650
    $regPath = "Software\Microsoft\Windows NT\CurrentVersion"
    $regValue = "DigitalProductId4"
    Foreach ($target in $targets) {
        $productKey = $null
        $win32os = $null
        $wmi = [WMIClass]"\\$target\root\default:stdRegProv"
        $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue)
        $binArray = ($data.uValue)[52..66]
        $charsArray = "B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9" 
        For ($i = 24; $i -ge 0; $i--) {
            $k = 0
            For ($j = 14; $j -ge 0; $j--) {
                $k = $k * 256 -bxor $binArray[$j]
                $binArray[$j] = [math]::truncate($k / 24)
                $k = $k % 24
            }
            $productKey = $charsArray[$k] + $productKey
            If (($i % 5 -eq 0) -and ($i -ne 0)) {
                $productKey = "-" + $productKey
            }
        }
        $win32os = Get-WmiObject Win32_OperatingSystem -computer $target
        $obj = New-Object Object
        $obj | Add-Member Noteproperty "Nome do Computador" -value $target
        $obj | Add-Member Noteproperty "Edição do Windows" -value $win32os.Caption
        $obj | Add-Member Noteproperty "Versão do Service Pack" -value $win32os.CSDVersion
        $obj | Add-Member Noteproperty "Arquitetura" -value $win32os.OSArchitecture
        $obj | Add-Member Noteproperty "Número da Versão" -value $win32os.BuildNumber
        $obj | Add-Member Noteproperty "Registado para" -value $win32os.RegisteredUser
        $obj | Add-Member Noteproperty "Canal de origem (ProductID)" -value $win32os.SerialNumber
        $obj | Add-Member Noteproperty "Chave do produto (ProductKey)" -value $productkey
        $obj
    }
}

Get-WindowsKey

 

 

blog055

 

3 – Pressionar a tecla F5 ou então clicar no botão play

 

 

Na área de resultados vai aparecer o seguinte:

Nome do Computador                       : .
Edição do Windows                            : Microsoft Windows 7 Enterprise
Versão do Service Pack                    : Service Pack 1
Arquitetura                                            : 64-bit
Número da Versão                              : 7601
Registado para                                      : NOME_DO_REGISTO
Canal de origem (ProductID)         : 11111-11111-11111-11111
Chave do produto (ProductKey) : A123A-A123A-A123A-A123A-A123A

 

 

O script PowerShell que aqui coloquei foi desenhado por forma a ser possível obter a chave de produto em múltiplas máquinas remotas, bastando para isso passar o nome do(s) computador(es) à função Get-WindowsKey. Quando o nome da máquina não é especificado o mesmo é substituído por “.” o que corresponde à máquina local.

Para que este script funcione em máquinas remotas é necessário garantir que o contexto de utilizador na qual o script é executado tem permissões de administração sobre a máquina remota e/ou permissões sobre os objetos WMI das máquinas remotas.

Nas instalações OEM do Windows a chave obtida através deste método é diferente daquela que se encontra impressa no COA (Certificado de Autenticidade). Isto significa que a chave obtida é apenas válida quando usada em conjunto com o meio de instalação/recuperação fornecido pelo fabricante do computador.

 

 

Recursos adicionais:

Página de onde foi retirado o script original: http://mspowershell.blogspot.pt/2009/02/retrieveing-windows-product-key.html

Página oficial do PowerShell:

http://technet.microsoft.com/pt-pt/scriptcenter/dd742419.aspx

Como interpretar o valor do ProductID:

http://support.microsoft.com/kb/936607/pt

 

Notas:

– O resultado apresentado em “ProductID” e “ProductKey” foram alterados propositadamente neste artigo.

– Efetuei alterações ao script original por forma a corrigir uma pequena anomalia relativa ao nome da chave e efetuei a tradução dos resultados obtidos para o idioma Português.

– Em versões anteriores ao Windows 7 a chave é DigitalProductID

– Não funciona em Windows 8 e/ou Windows Server 2012

Deteção de problemas no disco rígido

Uma das peças mais frágeis que constituem o computador pessoal é o disco rígido, por isso, é expectável que quando um disco rígido não se encontra em perfeito estado, que o desempenho e a estabilidade do computador sejam afetados.

O disco rígido tem uma forte componente mecânica, como tal, as peças estão sujeitas a desgaste por uso. Para além do desgaste existe também o fator da densidade, ou seja, a capacidade de armazenamento dos dados aumentou sem que o tamanho físico do disco aumentasse, fazendo com que as operações de leitura e de escrita tenham de ser muito mais precisas (o que na maior parte das vezes nos equipamentos modernos acontece).  Se juntarmos estes dois fatores de instabilidade ao fato do sistema operativo necessitar constantemente de ler e escrever informação de/para o disco, obtemos uma forte dependência entre a estabilidade  do sistema operativo e o funcionamento do disco.

Dada a arquitetura e o modo de funcionamento dos discos rígidos não é fácil determinar quando é que um disco vai falhar, por isso é muito importante estar atento aos sintomas que podem ser tão vagos como:

  • Sistema operativo deixa de arrancar
  • Durante o processo de arranque do computador surgem mensagens relacionadas com falta de ficheiros ou entradas de registo corrompidas
  • Lentidão excessiva
  • Sistema operativo deixa de responder a efetuar algumas tarefas e depois aparentemente retoma
  • Ouvem-se barulhos (tipo cliques ou estalidos) quando o disco se encontra em funcionamento

Tirando o último sintoma referido, os restantes podem ser perfeitamente provocados por outras situações não relacionadas com o disco, por isso, infelizmente, o método mais eficaz para determinar o estado físico é monitorizar o estado do mesmo.

 

 

Como é que se pode monitorizar o estado físico de um disco?

É possível obter o estado físico do disco “pedindo” à controladora do disco que nos devolva o seu estado ou monitorizando os eventos que a controladora do disco vai passando para o sistema operativo. O “problema” destas duas opções são não serem evidentes como é que se realizam e no caso específico da segunda, a morosidade da pesquisa no Visualizador de Eventos por erros relacionados com o disco ou controladora do disco.

Neste artigo vou mostrar como é que com simples linhas de comando (em PowerShell) se consegue obter esta informação sem recorrer a software externo.

O primeiro passo é lançar o PowerShell, para tal basta efetuar:

  • Clicar em “Iniciar” e escrever “PowerShell”

Para saber se o que é que a controladora do disco está a dizer ao sistema operativo relativamente ao seu estado, deve executar-se na linha de comandos do PowerShell o seguinte:

 

(Get-WmiObject win32_diskdrive).status

 

Se o resultado for diferente de “OK” então é porque a controladora está a dizer que está a detetar demasiados erros ou que o disco em breve vai falhar.

Se não for devolvido nenhum resultado pela execução do comando então é porque a controladora não está a devolver informação SMART ou então o disco não suporta SMART.

Os valores possíveis, segundo a documentação da Microsoft, são “OK”, “Error”, “Degraded”, "Unknown", "Pred Fail", "Starting", "Stopping", "Service", "Stressed", "NonRecover", "No Contact" e "Lost Comm".

 

blog040

Exemplo da execução quando não existem erros a reportar por parte da controladora

 

Para saber se já existem eventos registados no sistema operativo que evidenciem problemas no disco, deve executar-se na linha de comandos do PowerShell a seguinte instrução:

 

Get-EventLog -LogName System –InstanceId 3221487627 -ea 0 | ForEach-Object { $_.ReplacementStrings[0] } | Group-Object -NoElement | Sort-Object Count -Descending

blog041

Exemplo da execução quando não existem erros

 

blog042

Exemplo da execução num computador cujo disco apresenta bastantes erros

 

Podemos ainda usar o PowerShell para obter a opinião do sistema operativo sobre a necessidade ou não de se desfragmentar o disco. Para isso basta executar a seguinte instrução:

 

(Get-WmiObject win32_volume -filter "drivetype=3").DefragAnalysis().DefragRecommended

blog043

Exemplo da execução num computador no qual o sistema operativo diz não existir a necessidade de se efetuar a desfragmentação do disco

 

Utilizando ainda o WMI podemos questionar o sistema operativo sobre se a controladora do disco informou o sistema operativo que está prestes a falhar. A execução deste comando perde um pouco a sua importância porque o próprio sistema operativo quando a controladora se encontra neste esta, informa o utilizador. Existem ainda BIOS que durante o arranque efetuam este mesmo teste e têm a capacidade de informar o utilizador. Para obter esta informação basta, uma vez mais na linha de comandos PowerShell, executar o seguinte:

 

Get-WmiObject -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus -property PredictFailure

 

Se o resultado for diferente de “False” é porque o disco se encontra com sérios problemas e como tal a primeira coisa que deve ser feita é uma cópia de segurança atual aos dados que interessam preservar pois dificilmente vão conseguir ver várias vezes esta mensagem.

blog044

Exemplo da execução num computador cuja controladora não prevê nenhuma falha do disco

 

 

Onde é que encontro o PowerShell para executar estas instruções?

O Windows PowerShell é um componente do Windows que vêm incluído no sistema operativo desde o Windows Vista e Windows 2008 Server, no entanto é possível instalar o PowerShell num Windows XP ou Windows 2003 , para isso basta descarregar e instalar o Windows Management Framework.

A página  que contem as hiperligações necessárias para os sistemas operativos Windows XP, Vista, 2003 e 2008 encontra-se em http://support.microsoft.com/kb/968930

Se o sistema operativo for Windows Server 2008 ou Windows Server 2008 R2 poderá ser necessário ativar o Windows PowerShell. Os passos para o fazer são os seguintes:

Na consola de gestão Server Manager clicar em “Features” | “Add Feature”. Na janela de funcionalidades ativar o “Windows PowerShell Integrated Scripting Environment (ISE)

blog045

Imagem da consola de gestão do Windows Server 2008 R2 para adicionar a funcionalidade Windows PowerShell

 

 

Notas:

Nenhuma das instruções tem mais do que uma linha, apesar de visualmente aparentarem, por isso sugiro que copiem e colem diretamente a instrução na consola do PowerShell.

A dificuldade em detetar com antecedência problemas no disco rígido não está de forma alguma relacionada com o sistema operativo, ou seja, o Windows não é pior nem melhor que os outros. A verdadeira causa desta incerteza prende-se com o fato de os fabricantes de discos rígidos não disponibilizarem mais informação e informação mais concreta sobre o real estado do disco.

Como renomear um conjunto de ficheiros para nomes distintos

Tive recentemente a necessidade de renomear um conjunto bastante alargado de ficheiros para um nome que fosse constituído por uma parte fixa e uma outra incremental com o objectivo de no final ter um nome distinto por ficheiro. Exemplo: Renomear os ficheiros

testeaaa.txt

olaabc.txt

qualquercoisa.txt

para

ficheiro1.txt

ficheiro2.txt

ficheiro3.txt.

 

O Explorador do Windows permite renomear ficheiros em bloco através da interface. Para isso basta seleccionar todos os ficheiros que se pretende renomear, clicar com o botão direito do rato e escolher a opção de contexto “Renomear”. Esta solução para o meu caso específico não era eficaz porque os ficheiros ficariam com o seguinte aspecto:

ficheiro (1).txt

ficheiro (2).txt

ficheiro (3).txt

O problema deste método é a existência de um espaço após o nome “ficheiro” e o número incremental encontrar-se dentro de parêntesis.

 

Em seguida lembrei-me do comando REN que permite renomear ficheiros. A sintaxe deste comando é bastante simples:

RENAME [unidade:][caminho]nomedeficheiro1 nomedeficheiro2.
REN [unidade:][caminho]nomedeficheiro1 nomedeficheiro2.

 

O problema que me faltava resolver era como é que poderia gerar a parte incremental para o nome do ficheiro….

Para tornar o nome “único” lembrei-me que poderia utilizar a notação 8.3 dos nomes dos ficheiros isto porque para evitar duplicação de nomes o sistema operativo coloca após o 6 caracter um valor incremental.

Para obter apenas os nomes dos ficheiros de uma pasta basta executar o comando:

dir /b

Para obter o nome dos ficheiros na notação 8.3 executa-se:

dir /x

O problema desta abordagem consiste na complexidade de intercalar estes dois resultados, ou seja, executar de uma só assentada a operação de renomeação de ficheiros.

Após diversas experiências concluí que não era viável ir por este caminho pois não existe nenhuma forma simples (e sem recurso a aplicações de terceiros) de intercalar estes dois resultados de forma a produzir um simples comando para fazer alterações em batch.

 

E agora a solução:

A solução para o meu problema consiste em duas pequenas batch files:

Contador.bat (incrementa o valor de uma variável e orquestra a execução da operação de renomeação)

MudaNome.bat (executa a mudança do nome com base na informação proveniente da bacth “Contador.bat

 

Conteúdo do ficheiro “Contador.bat

set /a contador=0

for %%f in (*.txt) do call MudaNome2.bat "%%f"

 

Conteúdo do ficheiro “MudaNome.bat

set /a contador=%contador%+1
ren "%1" ficheiro%contador%.txt

 

Se tiverem curiosidade em saber mais sobre os comandos internos usados basta na linha de comandos executar:

set /?

for /?

call /?

 

Provavelmente a forma mais elegante de resolver este problema seria criar um pequeno script em PowerShell, no entanto como ainda não me habituei ao PowerShell e passei (demasiados) anos a criar batch files, optei por esta forma mais arcaica (mas que funciona).

 

 

Recursos externos:

Guia de referência dos comandos de linha do Windows

http://technet.microsoft.com/pt-br/library/cc754340(WS.10).aspx

Guia de referência rápida do PowerShell

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7097

Literatura no MSDN para quem quer iniciar-se no PowerShell

http://msdn.microsoft.com/en-us/library/aa973757(VS.85).aspx