Não sei se é de conhecimento de todos mas, já faz alguns anos que você pode usar o SHIFT + Botão Direito e vai aparecer uma opção de “Abrir o prompt de comando aqui” e ele vai abrir uma tela do DOS dentro daquela estrutura de diretório.
A mesma coisa vale para qualquer parte vazia na janela de conteúdo.
Isso ajuda? ajuda, mas tem um detalhe chato, ele não abre o prompt elevado e mesmo nas versões mais recentes não tem a opção de powershell. Fora que para abrir tem que pressionar o SHIFT junto.
É possível melhorar isso? claro, senão não estaria escrevendo este post…
Só testei no Windows 10, se alguém testar em outras versões deixa um comentário dizendo se funcionou ou não e em qual versão.
Para isso vamos ter que adicionar algumas linhas de registro.
Sempre vale um ATENÇÃO !!! Se você não sabe alterar, ou tem medinho, de alterar o registro clique aqui.
Para os outros, abaixo tem o que vocês precisam copiar e salvar em um arquivo .reg, após importar o arquivo vocês terão 2 novos menus com o Botão Direito:
As vezes é legal voltar a trabalhar um pouco com outras coisas além de SQL Server,,,
Essa semana fiz uma consultoria em Active Directory,,,, Fui resolver alguns problemas de replicação e configurar um novo domain controler para replicação,,,
Até aí nenhum grande problema,,, o cliente já havia instalado o SO (Windows Server 2012R2),,, atualizei o SO, alteramos o nome, adicionando ao domínio,,, até aí tudo tranquilo,,,
O problema: o cliente havia instalado o SO na versão trial de 180 dias,,, quando tentamos registrar o Windows ele informava que o número de série não era compatível com a versão instalada,,,
Em contato com o time de suporte da MS eles informaram que a única opção era reinstalar o SO na versão correta,,, o que na teoria não estava errado,,, mas sempre tem um jeito,,,,
Caso você tenha instalado um SO trial e queira registra-lo como full faça o seguinte:
Abra o prompt em modo elevado e digite dism /online /get-targeteditions
Ele vai te mostrar para quais versões você pode elevar a instalação atual,,,
Tenha em mãos com o serial da versão que você quer usar
Agora digite: DISM /online /Set-Edition:ServerStandard /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula Onde neste caso a edição é para qual queremos registrar este SO e o xxxx é o número de série,,,
Se você fez certo será apresentada uma mensagem de erro,,,, Error 87
Você não tem como forçar um upgrade de versão usando um serial que nao seja de KMS,,, haha pegadinha do malandro,,,
Tenho alguns clusters que estão em Multi-site, usando um Quorum em File Share para melhorar a disponibilidade.
Como o “Cluster Core” conta como voto na contagem do cluster, tenho preferencia na localização do recurso, já que todos os nós estão votando ele trabalha como voto de desempate.
Eu precisava monitorar um evento bem particular do cluster, quando o “Cluster Core Resource” alterasse de site ele deveria alarmar pelo SCOM, até ai tranquilo,,, faço um script no POSH o pessoal coloca para monitorar e pronto….
Enquanto testava o script percebi que o Powershell ISE estava retornando mensagem de erro, fiquei revendo argumento, variável, comObject, mas não encontrei o erro…
Exception calling “Return” with “1” argument(s): “The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE))”
At line:15 char:1
+ $API.Return($bag)
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
A solução é bem simples:
Salve o arquivo em script e execute ele… o ISE não consegue interpretar o retorno do comObject.
Você chega em um cliente, o pessoal reclama que uma aplicação X parou de funcionar porque o certificado expirou…
Você abre a aplicação e vê que o certificado foi gerado por um CA interno, mas ninguém sabe qual a maquina que está com a role de CA.. a única coisa que eles sabem é que a role está em um DC…
Quando você abre o DC, tem pelo menos 14 DC´s… iai ?? olhar um por um? e se alguém fez a proeza de instalar em outra maquina?
Não que isso seja a solução de todos os problemas,,, mas já vai ajudar pra caramba:
Todo mundo já passou por isso,,, Depois de um passeio qualquer você e sua câmera chegam em casa e começa aquele martirio de passar as fotos da camera para o disco…
Quando você percebe tem uns poucos gigas de foto em um diretório qualquer…
Ta certo que isso não representa muito,,, tenho 2TB no NAS justamente para armazenar coisas…
Mas para você, é bem provável que fique abrindo imagem por imagem no Paint e clicando em salvar uma a uma…
Pensando em diminuir um pouco esse trabalho, montei um script, em powershell, para fazer esse trabalho chato…
Ele até que é simples, vai procurar arquivo por arquivo dentro de um diretório e em seus sub-diretórios e vai tentar salvar o arquivo com um tamanho inferior na linha 16 está configurado o tamanho máximo do novo arquivo que ele vai respeitar,,, qualquer coisa superior a isso ele vai deixar o arquivo original…
ATENÇÃO: uma coisa muito importante, eu testei esse arquivo em meu ambiente com as minhas fotos, eu sei o resultado que esperava e tenho backup. Antes de testar esse script em suas fotos faça uma cópia de algumas delas e execute o script. veja se o resultado esperado é satisfatório. Dependendo da foto ele reduz em alguns porcentos as dimensões da imagem, nada que tire a qualidade da imagem mas foi a forma do mecanismo em forçar a redução.
ATUALIZAÇÃO: Se vocês perceberam o código tem um pequeno BUG que pode atrapalhar um pouco a forma de armazenagem das fotos, na execução ele cria um novo arquivo e compara esse novo arquivo com o arquivo original, se a compressão funcionou ele remove o arquivo anterior e renomeia o novo arquivo para o nome antigo. Até aí sem problemas, o problema é que ele criou um arquivo, logo a data de criação e modificação são da data em que você executar o script. Para tentar resolver isso, adicionei duas linhas no código onde eu coloco em uma variável de data a informação com a data da última modificação (por que última modificação? porque se você mover o arquivo de lugar a data de criação é alterada) e outra linha no IF onde se o arquivo novo for menor que o arquivo original ele renomeia e troca a data de criação e modificação para a data do arquivo original.
Estou testando o script e até agora ele não falhou, caso encontrem algum bug o código está aí para ser alterado.
# Titulo: redutor de espaco ocupado por imagens jpg gif tif bmp
# Atencao: salve este arquivo com extensao .ps1 no diretorio raiz onde estao suas fotos
# abra o powershell e digite ” Set-ExecutionPolicy -ExecutionPolicy unrestricted “
# execute o arquivo que voce salvou com extensao .ps1 ele vai correr todos os arquivos no diretorio e sub-diretorio
#
# Execute este script por sua conta e risco,
# em todos os meus testes ele funcionou sem problemas mas nao quer dizer que ele vai funcionar em todos os ambientes.
#
# ricardo leka roveri
# https://leka.com.br
# @bigleka
# ricardo@leka.com.br
[reflection.assembly]::LoadWithPartialName(“System.Drawing”)
$SizeLimit=1280 # tamanho maximo que ele usa como limite
$logfile=”resizelog.txt” # Caso de erro ele gera um arquivo de relatorio
$toresize=$args[0] # lista de diretorio para localizar e modificar arquivos. pode deixar vazio
echo $toresize
$error.clear()
# primeira parte, localiza e altera arquivos jpg
Get-ChildItem -recurse $toresize -include *.jpg | foreach {
$OldBitmap = new-object System.Drawing.Bitmap $_.FullName # abre arquivo jpg
if ($error.count -ne 0) { # trata erro
$error | out-file $logfile -append -encoding default
$error[($error.count-1)].TargetObject | out-file $logfile -append -encoding default
echo $_>>$logfile
$error.clear()
}
$LongSide=$OldBitmap.Width # localiza as dimencoes
[datetime]$CreationDate=Get-ChildItem $_.FullName | Select-Object -ExpandProperty LastWriteTime # Armazena o campo da data de última modificação em uma variável para alterar a propriedade do novo arquivo
if ($OldBitmap.Width -lt $OldBitmap.Height) { $LongSide=$OldBitmap.Height }
if ($LongSide -gt $SizeLimit) { # se o arquivo localizado eh maior que o limite que voce configurou trabalha ele
if ($OldBitmap.Width -lt $OldBitmap.Height) { # calcula as dimencoes da figura
$newH=$SizeLimit
$newW=[int]($OldBitmap.Width*$SizeLimit/$OldBitmap.Height)
} else {
$newW=$SizeLimit
$newH=[int]($OldBitmap.Height*$newW/$OldBitmap.Width)
}
$NewBitmap = new-object System.Drawing.Bitmap $newW,$newH # cria o novo arquivo
$g=[System.Drawing.Graphics]::FromImage($NewBitmap)
$g.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic # utiliza algoritimo de alta qualidade
$g.DrawImage($OldBitmap, 0, 0, $newW, $newH) # redimensiona sua imagem
$name=$_.DirectoryName+”\”+$_.name+”.new” # gera um novo nome para a imagem
$NewBitmap.Save($name, ([system.drawing.imaging.imageformat]::jpeg)) # salva a nova imagem modificada
$NewBitmap.Dispose() # limpa a bagunca
$OldBitmap.Dispose()
$n=get-childitem $name
if ($n.length -ge $_.length) { # se o arquivo novo for maior que o arquivo original
Write-host -NoNewLine “+” # escreve um “+”
$n.delete() # e apaga ele
} else { # se o arquivo novo for menor que o origial
if ($n.Exists -and $_.Exists) {
$name=$_.FullName
$_.Delete() # apaga o original
$n.MoveTo($name) # renomeia o arquivo novo com o nome do arquivo original
Get-ChildItem $n | % { $_.CreationTime = $CreationDate } # utiliza a variável da data de modificação do arquivo original para alterar o campo da data de criação do novo arquivo
echo ($Name + ” ” + $LongSide) # escreve o nome na tela para fins didaticos
}
}
} else {
Write-host -NoNewLine “.”
$OldBitmap.Dispose()
}
}
# segunda parte, arquivos que nao sao jpg
Get-ChildItem -recurse $toresize -include *.bmp, *.tif, *.gif | foreach { # neste caso arquivos bmp, tif e gif
$OldBitmap = new-object System.Drawing.Bitmap $_.FullName
if ($error.count -ne 0) {
$error | out-file $logfile -append -encoding default
$error[($error.count-1)].TargetObject | out-file $logfile -append -encoding default
$error.clear()
}
$LongSide=$OldBitmap.Width
[datetime]$CreationDate=Get-ChildItem $_.FullName | Select-Object -ExpandProperty LastWriteTime
if ($OldBitmap.Width -lt $OldBitmap.Height) { $LongSide=$OldBitmap.Height }
if ($LongSide -gt $SizeLimit) {
if ($OldBitmap.Width -lt $OldBitmap.Height) {
$newH=$SizeLimit
$newW=[int]($OldBitmap.Width*$SizeLimit/$OldBitmap.Height)
} else {
$newW=$SizeLimit
$newH=[int]($OldBitmap.Height*$newW/$OldBitmap.Width)
}
$NewBitmap = new-object System.Drawing.Bitmap $newW,$newH
$g=[System.Drawing.Graphics]::FromImage($NewBitmap)
$g.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
$g.DrawImage($OldBitmap, 0, 0, $newW, $newH)
$name=$_.DirectoryName+”\”+$_.name.substring(0, $_.name.indexof($_.extension))+”.jpg” # gera um novo nome com extensao jpg
$NewBitmap.Save($name, ([system.drawing.imaging.imageformat]::jpeg)) # salva o novo arquivo
$NewBitmap.Dispose()
$OldBitmap.Dispose()
$n=get-childitem $name
if ($n.length -ge $_.length) {
$n.delete()
Write-host -NoNewLine “+”
} else {
echo ($Name + ” ” + $LongSide)
$_.Delete()
}
} else {
$name=$_.DirectoryName+”\”+$_.name.substring(0, $_.name.indexof($_.extension))+”.jpg”
$OldBitmap.Save($name, ([system.drawing.imaging.imageformat]::jpeg))
$OldBitmap.Dispose()
$n=get-childitem $name
if ($n.length -ge $_.length) {
$n.delete()
Write-host -NoNewLine “-“
} else {
Get-ChildItem $n | % { $_.CreationTime = $CreationDate }
echo ($Name + ” ” + $LongSide)
$_.Delete()
}
}
}
Acabei de colocar um post escrevendo como faz o logon automático para o w2k3 ai fui testar a mesma coisa no w2k8 e percebi que não havia a opção do Users must enter a user name and password to use this computer não aparecer mais,,, aahh isso só acontece depois que você coloca a maquina w2k8/7 no domínio…
Acho que todos já devem saber como faz para habilitar o autologon no Windows 2003 más não custa nada ser mais um à colocar a mesma tela e os mesmos comandos para mostrar como faz,,,
Eu estava com uma necessidade interessante: Como colocar um executável como serviço? sendo que esse executável é um programa em delphi que não foi projetado para ser um serviço. Pesquisando um pouco achei uma documentação interessante: http://support.microsoft.com/kb/137890/pt-br
Resumindo esse documento fiz o seguinte:
1º Instalei o Windows Resource Kit
2º pelo atalho do prompt criado pelo Resource Kit criei um atalho com o nome que eu queria. Ex: Instsrv.exe Nome_do_serviço “C:\Program Files\Resource Kit\Srvany.exe”
ATENÇÃO !!! Esse Srvany.exe EXISTE, essa linha é assim mesmo, tem que criar desse jeito, esse executável deixa que você coloque qualquer aplicação para iniciar como serviço, nos próximos passos estou explicando onde você vai colocar o Executável que vai realmente iniciar o processo.
3º Após executar o passo 2 verifiquei que no registro foi criada uma entrada parecida com: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Nome_do_serviço
4º Dentro dessa chave Nome_do_Serviço, criei uma chave com o nome Parameters
5º Dentro de Parameters adicionei um registro do tipo REG_SZ com o nome Application, a sequência da chave contém o caminho do executável. Ex. C:\windows\notepad.exe
6º Fechei o Editor de Registro
7º Em Serviços já aparece o serviço que criei e é só iniciá-lo.
Quando você está executado um Windows 2003 server sem conexão com a internet, você pode localizar o seguinte evento no seu eventlog:
—————–
Event Type: Error
Event Source: crypt32
Event Category: None
Event ID: 8
Date: date
Time: time
User: user name
Computer: computer name
Description: Failed auto update retrieval of third-party root list sequence number from: with error: This operation returned because the timeout period expired.
For more information, see Help and Support Center at http://support.microsoft.com.
—————–
Para resolver isso, ou você tem acesso a internet ou remova o componente Update Root Certificates.
Para remover o componente faça o seguinte:
1. Vá em Add/Remove Programs (iniciar – executar – “appwiz.cpl”)
2. Click em Add/Remove Windows Components na esquerda.
3. Desmarque o Update Root Certificates, e termine o Windows Components Wizard.
Eba !!! chegou minha renovação do MCT,,, hehehe e com ela a renovação do MSDN,,,
let's make things better
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.