quarta-feira, 3 de junho de 2015

SQL Server - Desconectar todos os usuários do banco


O comando SQL abaixo desconecta todos os usuários e desfaz as transações pendentes, colocando o banco como silgle_user

ALTER DATABASE BancoDeDados SET SINGLE_USER WITH ROLLBACK IMMEDIATE;



O comando abaixo seta o banco novamente para multiusuário

ALTER DATABASE BancoDeDados SET MULTI_USER
 

terça-feira, 2 de junho de 2015

Exchange - Monitorar caixas postais Exchange e gravar no SQL Server

É sempre importante manter um histórico da quantidade e do tamanho das caixas postais.

O script powershell deve ser executado no snap-in do Exchange e armazenará o nome da base, o tamanho, o espaço livre, a data, o nome do servidor e a quantidade de emails no servidor de banco de dados.

Para isto é necessário criar uma tabela no banco de dados com o script abaixo:

CREATE TABLE [dbo].[indicadorExchange](
[base] [varchar](50) NULL,
[tamanho] [numeric](18, 2) NULL,
[livre] [numeric](18, 2) NULL,
[data] [date] NULL,
[server] [varchar](50) NULL,
[mailbox] [int] NULL
) ON [PRIMARY]

GO

Criada a tabela  basta executar o script abaixo com um usuário que tenha acesso ao Exchange e acesso à tabela que foi criada.

add-pssnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$conn = New-Object System.Data.SqlClient.SqlConnection(“Data Source=servidorSQL\instancia; Initial Catalog=nomeDoBancoDeDados; Integrated Security=SSPI”)
$conn.Open()
$cmd = $conn.CreateCommand()
$data = Get-Date -format yyyy/MM/dd


$database = Get-MailboxDatabase -IncludePreExchange2013 -status
$database = $database += Get-PublicFolderDatabase -Status


foreach($db in $database) {

$nome = $db.Name
$tamanho = $db.DatabaseSize.ToMB()
$livre = $db.AvailableNewMailboxSpace.ToMB()
$server = $db.Server
if ($nome -like 'PUBLIC*'){
$emails = "0"   
} else{
$emails = (Get-Mailbox -ResultSize Unlimited -Database $nome).count
}

#write-host $nome - $tamanho - $livre
$cmd.CommandText =“insert into indicadorExchange values ('$nome', '$tamanho', '$livre', '$data', '$server', '$emails' );” + $cmd.CommandText
#write-host $nome, $tamanho, $livre, $data, $server, $emails
}

$data = $cmd.ExecuteReader()

$conn.Close()


segunda-feira, 1 de junho de 2015

Powershell - Ler o conteúdo de vários arquivos e adicionar em um arquivo

As vezes precisamos consolidar o conteúdo de vários arquivos em somente um para facilitar a visualização.
Para isto pode-se utilizar os comandos powershell abaixo:

#A pasta de destino precisa existir
#Exemplo: $pastaLogs="c:\logs\*.txt"
$pastaLogs="caminho\*.txt"


$arquivos = dir $pastaLogs
foreach ($arquivo in $arquivos){
    Get-Content $arquivo >> c:\temp\log.txt

}

Será salvo o arquivo c:\temp\log.txt com o conteúdo de todos os arquivos .txt da pasta c:\logs.


Windows - Listar usuarios de um grupo

O comando powershell abaixo lista todos os usuários que fazem parte de um grupo, de forma recursiva, isto é, incluindo todos os sub-grupos:

Get-ADGroupMember -recursive grupo | select SamAccountName