Temporary Post Used For Theme Detection (a76b3ae4-d201-45b2-b8a6-3de8cbbca358 – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

This is a temporary post that was not deleted. Please delete this manually. (3ec676c9-9a66-48d9-a382-90eb837f246c – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

Publicado em Uncategorized | Deixe um comentário

Criando Gateways de Rota dinamica no Azure com Powershell

Olá a pessoal,

Recentemente procurando uma forma de criar um gateway de rota Dinamica no azure, me deparei com este post que explicava como realizar o processo utilizando a API do Azure, visto que não há suporte ainda nos comandos nativos de azure no powershell para essa tarefa.

Decidi então transformar em uma função avançada com algumas pequenas modificações para processar mais de uma Vnet e aceitar input de pipeline.

O processo utiliza requests HTTP e postXML para enviar o comando de criação de gateway para a API do Azure.

Pode levar até uma hora dependendo da carga do azure, pois o processo de criação de gateways de rota dinamica é lento e possui diversas dependencias dentro da Fabric do Azure.

 

Abaixo o link para download da função e um print com o output em modo verbose.

TechNet Gallery: New-AzureVnetDynamicGateway

2014-07-25 16_42_20-Windows PowerShell ISE

 

Dúvidas? Sugestões? Comente!

Até a próxima!

Publicado em Azure, Powershell | Marcado com | Deixe um comentário

Determinando o tempo de inatividade da maquina usando Powershell

Olá a todos, no post de hoje irei explicar como podemos determinar o tempo de inatividade da maquina pelo LastUserInput usando C# e powershell.

Muitas vezes para a execução de determinada rotina nos vemos em um cenário em que o script só pode ser executado caso, a maquina esteja idle por mais de x minutos. Para isso podemos utilizar a seguinte dica.

Iremos adicionar um namespace renomeado para Posh.idle, que no caso nao foi escrito por mim, mas também nao consegui localizar o autor.

Utilizaremos o comando Add-type para carregar o codigo em memória.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
Add-Type @’
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace PoSH.Idle {public static class UserInput {

[DllImport(“user32.dll”, SetLastError=false)]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout(LayoutKind.Sequential)]
private struct LASTINPUTINFO {
public uint cbSize;
public int dwTime;
}

public static DateTime LastInput {
get {
DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount);
DateTime lastInput = bootTime.AddMilliseconds(LastInputTicks);
return lastInput;
}
}

public static TimeSpan IdleTime {
get {
return DateTime.UtcNow.Subtract(LastInput);
}
}

public static int LastInputTicks {
get {
LASTINPUTINFO lii = new LASTINPUTINFO();
lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lii);
return lii.dwTime;
}
}
}
}
‘@

 

Após a execução do código o resultado em sí é bem simples e facilmente utilizado.

Chamando o NameSpace diretamente entre colchetes podemos verificar os resultados:

001
[PoSH.Idle.UserInput]

Pressionando a tecla TAB para autocomplete, podemos listar as propriedades que desejamos visualizar, por exemplo:

001
[PoSH.Idle.UserInput]::IdleTime

image

Em um exemplo Prático de aplicação podemos utilizar o seguinte snippet:

001
002
003
004
005
006
007
008
009
010
011
012

$time = ([PoSH.Idle.UserInput]::IdleTime).Milliseconds

if($time -ge ’15’){   

     Write-host ‘Greater then 15 Milliseconds’

}
Else{
   
    Write-host ‘Less then 15 Milliseconds’

}

No exemplo acima, será salvo o número de mili segundos de inatividade do computador/usuário, e se for superior a 15 irá exibir a mensagem ‘Greater then 15 Milliseconds’ senão, irá exibir ‘Less than 15 Milliseconds’.

image

Este é um exemplo bem simplista da aplicação deste código, porém pode ser utilizado das mais diversas formas.

 

Dúvidas? Sugestões? Comente!

Até a próxima!

Publicado em Powershell | Marcado com , , , | Deixe um comentário

[UPDATE]Get Sysinternals Tools

Olá a todos,

Recentemente houve um problema no share ‘\\live.sysinternals.com\tools’, devido a isso só foi possivel baixar as ferramentas via HTTP, por este motivo decidi atualizar esta função e inserir o parâmetro DownloadProtocol, que permite alternar entre SMB e HTTP para realização do Download.

Technet Gallery: Get-SysinternalsTools

Exemplo HTTP:

http_example

Exemplo SMB:

SMB_example

 

Dúvidas? Sugestões? Comente!

Até a próxima!

Publicado em Powershell | Deixe um comentário

WMI Fixer Tool

Olá a todos!

Há um tempo atrás tive um problema sério em um Domain Controller que havia sito restaurado de uma Snapshot a quente no VMware, dentre outros problemas, um que estava impossibilitando a replicação era o repositório WMI que havia sido corrompido no processo.

Após pesquisar uma forma de restaurar o repositório me deparei com este artigo no technet, que continha o seguinte script:

cd /d %windir%\System32\Wbem
net stop winmgmt

winmgmt /clearadap
winmgmt /kill
winmgmt /unregserver
winmgmt /regserver
winmgmt /resyncperf

del% windir% \System32\Wbem\Repository /Q
del% windir% \System32\Wbem\AutoRecover /Q

for %%i in (*.dll) do Regsvr32 -s %%i
for %%i in (*.mof, * .mfl) do Mofcomp %%i
wmiadap.exe /Regsvr32
wmiapsrv.exe /Regsvr32
wmiprvse.exe /Regsvr32

net start winmgmt

O Script em si é simples, para o serviço Windows Management Instrumentation(‘winmgmt’) e faz a chamada do aplicativo de gerencia com os parametros para fazer o rebuild, em seguida apaga as pastas com os repositórios antigos e re-registra todas as DLLs e MOFs referentes a isso, em seguida registra os serviços novamente e inicia o serviço winmgmt.

Baseado nisso montei essa ferramenta usando Powershell e Windows forms que executa de forma automatizada este processo. Disponibilizei o link para download da ferramenta abaixo na Galeria do technet.

Technet Gallery: WMI Fixer Tool

Funcionalidades basicas:

  • Faz uma Verificação rápida de consistência do repositório, caso esteja inconsistente sugere que seja reparado, caso não esteja, ele irá questionar se mesmo assim você deseja reparar o repositório.

  • O botão reparar executa o procedimento do artigo

Importante:

Não me responsabilizo pelo uso indevido da ferramenta ou quaisquer problemas que venham a ocorrer no ambiente.

Abaixo um print da tela:

2014-06-25 14_31_44-WMI Fix

2014-06-25 14_33_59-About

 

Sugestões? Dúvidas? Comente!

Até a Próxima!

Publicado em Powershell | Marcado com , , , , , , , | Deixe um comentário

Converter HTML para PDF usando iTextSharp e Powershell

 

Olá a todos!

Recentemente precisei desenvolver uma interface com powershell para consulta de relatorios, porém ela deveria, dentre outras funcionalidades, salvar os relatórios em PDF. Após pesquisar muito encontrei o projeto iTextSharp, que é uma implementação .NET do projeto iText original, feito em Java.

Pois bem, após muitos testes pude perceber que esta biblioteca atenderia minhas necessidades. Neste post irei demostrar como podemos converter codigo HTML para PDF usando esta biblioteca.

Iremos precisar de 2 arquivos do projeto para esta tarefa, o iTextSharp.dll e o iTextSharp.XMLworker.dll. A versão utilizada é a 5.5.1, a mais recente até a data desta postagem.

Primeiro vamos carregar os assemblies para poder utilizar as classes e metodos necessários. Não se esqueçam de desbloquear os arquivos antes, caso contrario eles nao irão carregar corretamente.

001
002
Add-Type -Path ‘.\bin\itextsharp.dll’
Add-Type -Path ‘.\bin\itextsharp.xmlworker.dll’

Caregados os assemblies vamos definir o cogido HTML a ser exportado, neste exemplo, um simples filtro de serviços do windows:

001
[String]$HTMLCode = Get-Process | select Name, WS, CPU | ConvertTo-Html -As Table

Caso o conteúdo nao seja forçado em formato String, ele automaticamente será criado como uma array, o que irá gerar um erro durante o processo.

Agora iremos criar o documento e definir o tamanho da página para A4:

001
002
$PDFDocument = New-Object iTextSharp.text.Document
$PDFDocument.SetPageSize([iTextSharp.text.PageSize]::A4)

Agora para inicializar a escrita no arquivo, primeiro é necessario criar o Stream de escrita e definir usando o StringReader para ler a string HTML que geramos anteriormente, lembre se que no Stream fica o caminho no qual será salvo o arquivo:

001
002
$Stream = [IO.File]::OpenWrite(“$env:USERPROFILE\Desktop\Test.pdf”)
$reader = New-Object System.IO.StringReader($HTMLCode)

Agora iremos criar a instancia do writer para poder iniciar de fato a conversão, com um pequeno ajuste no InitialLeading, que tem um bug, quando nao definido, fica em 0, o que de forma intermitente, gera erro durante criação do PDF:

001
002
$Writer = [itextsharp.text.pdf.PdfWriter]::GetInstance($PDFDocument, $Stream)
$Writer.InitialLeading = ‘12.5’

Agora podemos acessar o documento para iniciar a escrita de fato:

001
$PDFDocument.Open()

O método ParseXHtml irá veriricar o Writer gerado, para escrever no documento e inserir o código contido no reader

001
002
$WorkerHelper = [iTextSharp.tool.xml.XMLWorkerHelper]::GetInstance()
$WorkerHelper.ParseXHtml($writer,$PDFDocument,$reader)

Após a conclusão do processo acima, bastainvocar o método close para finalizar a escrita no arquivo

001
$PDFDocument.close()

Resultado final:

2014-06-11 12_54_14-Test.pdf - Adobe Reader

 

Feito isso esta concluído o processo para gerar o arquivo PDF, abaixo esta a URL da função que escrevi baseada neste post publicada no Technet.

TechNet Gallery: Convertfrom-PDFtoHTML

Execução da função em modo verbose:

2014-06-12 12_31_30-Administrator_ Windows PowerShell ISE

 

Dúvidas? Sugestões? Comente!

Até a proxima!

Publicado em Powershell | Marcado com , , , , , | Deixe um comentário

Baixando Sysinternals pelo Powershell

 

Olá a todos, sempre que temos que formatar a workstation ou estamos em uma maquina diferente do habitual acabamos precisando de alguma ferramenta do kit Sysinternals desenvolvido pelo Mark Russinovich, que tem as melhores ferramentas para troubleshooting, na minha opinião, e diversas outras para IT Pros. Para facilitar o download, escrevi uma função que usando os cmdlets do modulo Bits, fazem o download de cada uma, basta prover o caminho que deseja salvar os arquivos no parametro ‘Path’ que ele irá iniciar o download.

A Função valida se o serviço webclient esta sendo executado, caso nao estiver ele tentará iniciar o serviço e valida o caminho provido no parametro, caso o diretório nao exista no caminho informado ele irá cria-lo e iniciar o download.  Inseri utilizando Write-progress o progresso de execução geral do script e utilizando o parametro Verbose, pode ser visualizado com detalhes o progresso tambem em texto.

Disponibilizei o script na galeria technet para todos que quiserem utilizá-lo.

Print pós conclusão do download:

Get-SysinternalsTools

Você pode obter o script aqui: Get-Sysinternals

Dúvidas? Sugestões? Comente!

Até a próxima!

Publicado em Powershell | Marcado com | 1 Comentário