sexta-feira, 3 de julho de 2020

Script de Login como administrador

Procurei pela internet varias informações sobre, mas a melhor maneira que encontrei ate hoje é desta maneira, ela parece uma gambiarra, mas funciona direitinho...

Eu criei da seguinte maneira

  • Criar um script geral_elev.bat na pasta NETLOGON, onde nele vai constar todos comandos que seja executados como administrador
  • Criar um script geral.bat na pasta NETLOGON onde nele consta os comandos abaixo (e claro, mais o que desejar colocar)
    1. Comandos de desejar
    2. copy \\SERVIDOR\netlogon\geral_elev.bat %PUBLIC% /y >nul 2>&1
    3. copy \\SERVIDOR\netlogon\geral_elev.exe %PUBLIC% /y >nul 2>&1
    4. c:
    5. cd %PUBLIC%
    6. geral_elev.exe
    7. del %PUBLIC%\geral_elev.bat /f 
    8. del %PUBLIC%\geral_elev.exe /f
Explicando linha a linha
    • Linha 1: Aqui vc insere o que desejar, mapeamentos, copias de arquivos, padrão do seu script
    • Linha 2: Copia o script onde tem os comandos que deseja que seja executado como administrador para pasta publica
    • Linha 3: Copia o executável responsável por executar o script acima como administrador para pasta publica (em seguida mostro como fazer)
    • Linha 4: Vai até o C:
    • Linha 5: Vai até a pasta publica comum a todos usuários
    • Linha 6: Executa o programa onde eleva o script geral_elev.bat (em seguida mostro como fazer)
    • Linha 7 e 8: Exclui os arquivos copiados anteriormente
  • Obs: no final dos comandos possui ">nul 2>&1", este serve para que não seja mostrado o resultado do comando, ficando uma tela mais limpa para o usuário.

Como fazer o executável que eleva o script geral_elev.bat
Para criar o geral_elev.exe, programa responsável por elevar o geral_elev.bat voce precisará o PSEXEC (facilmente achado na internet) e do WinRar
    • Clique o no executável PSexec.exe com o botão direito e selecione a opção "Add to archive" do WinRar
    • Na tela que abrir selecione "Create SFX archive" e mude o nome do arquivo para "geral_elev.exe", após clique na aba "Advanced"
    • Em "Advanced" clique em "SFX options"
    • Na aba "Setup" em "Run after program" coloque a linha abaixo
      • psexec -accepteula -u DOMINIO\USUARIO_ADMINISTRADOR -p SENHA "%public%\geral_elev.bat"
    • Na aba "Modes" selecione "Unpack to temporary folder" e "Hide all", estas opções fazem com que seja extraído o arquivo PSEXEC.exe em um local temporário e que não seja mostrado nenhuma tela de dialogo
    • Clique em OK e OK de novo para ser criado o arquivo "geral_elev.bat"
    • Copie o arquivo "geral_elev.bat" para o NETLOGON, junto com os scripts "geral.bat" e "geral_elev.bat"
Pronto..... agora todos comandos que vc colocar no script geral_elev.bat será executado como o usuário informado no "Run after program", desta maneira caso queira adicionar um novo comando no script geral_elev.bat não será necessário recriar o arquivo EXE.

quarta-feira, 19 de fevereiro de 2020

Copia de base Produção para base Testes do Protheus 12


  1. Acesse o SQL Management Studio
  2. Selecione a base de dados que voce deseja restaurar (base testes), clique com o botão direito > Tarefas > Restaurar > Arquivos e Grupo de Arquivos
  3. Verifique se o banco de dados de destino está correto (base testes)
  4. Em Dispositivo de origem selecione o arquivo do backup da base de produção
  5. Agora em Opções (lado esquerdo superior)
    1. Marque "Substituir o banco de dados existente (WITH REPLACE)
    2. Abaixo será mostrado os arquivos de banco de dados e log, nos "..." selecione o caminho e nome do arquivo onde está a base TESTES
    3. Pressione OK
  6. Pronto, o banco de dados será copiado, agora vamos copiar a aplicação
  7. Copie o pasta "System" e o RPO para a pasta onde está a base testes
  8. Dentro da pasta "System" exclua o arquivo sigamat.ind > ele vai recriar
  9. Após isto suba o serviço do protheus e altere os parâmetros abaixo para usar o ambiente homologação do TSS
    1. SX6
    2. MV_SPEDURL

Bônus: Se der erro de smartclient exclua os arquivos *.idx e *.cdx e os arquivos XX6010.dtc, XX6010.cdx, XX7010.dtc e XX7010.cdx na pasta SYSTEM

segunda-feira, 27 de janeiro de 2020

Alerta de conexão e desconexão de RDP

Como configurar para receber um alerta de e-mail quando alguém conectar e desconectar em uma sessão de TS (RDP)
São necessários 3 scripts

1. get_loggeduser.ps1 (responsável por pegar as informações da sessão)
echo $env:username
netstat -an | select-string ":3389" | select-string "ESTABLISHED"

2. sendmail_login.ps1 (responsável pelo envio de email

$SMTPServer = "smtp.office365.com"
$SMTPPort = "587"
$Username = "email@dominio.com.br" 
$Password = "suasenha" 
$to = "destino@dominio.com.br" 
$subject = "Sessao TS Conectada" 
$body = [IO.File]::ReadAllText("C:\scripts\rdp_alert\log\login.txt") 
$message = New-Object System.Net.Mail.MailMessage 
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.from = $username

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host “Mail Sent”

3. login_rdp.bat (responsável pela execução dos PS)
@echo off
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\get_loggeduser.ps1" > C:\scripts\rdp_alert\log\login.txt
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\sendmail_login.ps1"
Pronto.. agora para funcionar você deve criar um agendamento no taskmanager quando no log Microsoft-Windows-TerminalServices-LocalSessionManager/Operational ocorrer os eventos no log 25 e 21 no logon ou 24 no logoff

Eu criei outros dois scripts para melhor identificação do alerta (logoff_rdp e sendmail_logoff.ps1), desta forma visualizo no próprio assunto do e-mail o que ocorreu.

fonte: https://www.virtualizationhowto.com/2015/03/receive-alerts-when-user-connects-or-disconnects-from-rdp/


Caso queira criptografar a senha no script, voce deve:

Rodar este script via powershell
$credential = Get-Credential 
$credential.Password | ConvertFrom-SecureString | Set-Content C:\scripts\rdp_alert\cryptpassword.pass

O mesmo irá criar um arquivo chamado cryptpassword.pass com o usuario e senha criptografado. agora substitua as seguintes linhas
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);

por estas linhas
$encrypted = Get-Content C:\scripts\rdp_alert\cryptpassword.pass | ConvertTo-SecureString
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $encrypted);

fonte: https://interworks.com/blog/trhymer/2013/07/08/powershell-how-encrypt-and-store-credentials-securely-use-automation-scripts/

quinta-feira, 5 de dezembro de 2019

Assinatura automatica no Outlook via GPO

Assinatura automatica no Outlook via GPO utilizando dados do AD

Necessário criar um script VBS rodando via script de logon na configuração de usuário
segue script

------------------------- assinatura.vbs ------------------

' VBScript source code
' Configuracao para buscar os dados no Active Directory
' Pagina do script base: http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/a591403a-796a-4a45-872d-febe44265e34
' Nome da Consulta no forum:  Script para inserir assinatura
' Referencias para Funções: http://www.pctools.com/guides/scripting/id/25/?act=reference


On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName

Set objUser = GetObject("LDAP://" & strUser)

strName = objUser.FullName
strFirstName = objuser.givenName
'StrLastName = objuser.sn
strTitle = objUser.Title
srtDepartament = objUser.department
'strCompany = objUser.Company
'strStreet = objUser.StreetAddress
'strLocation = objUser.l
'strCountry = objUser.co
'strPostCode = objUser.PostalCode
strPhone = objUser.TelephoneNumber
'strFax = objUser.FacsimileTelephoneNumber
strEmail = objUser.mail
strNomeArq = "Assinatura " & strFirstName

'   Caminho para buscar o logo da empresa

strLogo = "\\SRVAD\netlogon\Assinatura\Logo.png"
strBarra = "\\SRVAD\netlogon\Assinatura\Barra.png"


Set objWord = CreateObject("Word.Application")
    objWord.Visible = False
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objRange = objDoc.Range()
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries

'   Formatacao de fonte e paragrafo
objSelection.Font.Name = "Franklin Gothic Book"
objSelection.Paragraphs.LineSpacingRule = wdLineSpaceSingle
objselection.Paragraphs.SpaceAfter = 1
objRange.Font.Name = "Franklin Gothic Book"
objRange.Font.Size = 10

' Inicio da Assinatura


' Define uma tabela de 1x1

objDoc.Tables.Add objRange, 1, 2

 Set objTable = objDoc.Tables(1)


'Logotipo Empresa
With objTable.Cell(1, 1)
With .Range.Select
objSelection.InlineShapes.AddPicture(strLogo)
objTable.Columns(1).Width = 120
objTable.Columns(2).Width = 440
End With
End With

'Insere nome do funcionario
With objTable.Cell(1, 2)
With .Range.Select
objSelection.Font.Name = "Franklin Gothic Book"
objSelection.Font.Size = "16"
objSelection.Font.Color = RGB(175,0,15)
objSelection.Font.Bold = False
objSelection.TypeText strName & VbCr

'Insere Cargo, email e telefone
Set objSelection = objWord.Selection
objSelection.Font.Bold = False
objSelection.Font.Size = "11"
objSelection.Font.Color = RGB(69,69,69)
objSelection.TypeText strTitle & VbCr
objSelection.TypeText strEmail & VbCr
objSelection.TypeText strPhone & VbCr
objSelection.Font.Size = "5"
objSelection.TypeText VbCr
'Insere barra no final
objSelection.InlineShapes.AddPicture(strBarra)
End With
End With

'Finalizacao e Definicao do nome da assinatura e coloca a mesma como padrao
Set objSelection = objDoc.Range()
objSignatureEntries.Add strNomeArq,  objSelection
objSignatureObject.NewMessageSignature = strNomeArq
objSignatureObject.ReplyMessageSignature = strNomeArq
objDoc.Saved = True
objWord.Quit


Definindo Wallpaper conforme resolução

Na empresa onde trabalho se fez necessário dois papeis diferentes conforme o tipo de monitor, 4:3 ou 16:9, para isso foi necessário colocar o script abaixo no em uma GPO de logon para que mude o papel de parede conforme o tipo de tela

-------------------------------------
echo off
setLocal EnableDelayedExpansion

if %computername% == Servidor GOTO server

wmic path Win32_VideoController get CurrentHorizontalResolution| FIND /I "1920">Nul && (GOTO wide)
wmic path Win32_VideoController get CurrentHorizontalResolution| FIND /I "1440">Nul && (GOTO wide)
wmic path Win32_VideoController get CurrentHorizontalResolution| FIND /I "1366">Nul && (GOTO wide)
wmic path Win32_VideoController get CurrentHorizontalResolution| FIND /I "1360">Nul && (GOTO wide)
wmic path Win32_VideoController get CurrentHorizontalResolution| FIND /I "1600">Nul && (GOTO wide)

GOTO normal

:wide
copy /y \\servidor\sysvol\scripts\Wallpapers\wide\* %userprofile%\Pictures\
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True
GOTO fim

:normal
copy /y \\servidor\sysvol\scripts\Wallpapers\normal\* %userprofile%\Pictures\
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True
GOTO fim

:server
del /q c:\temp\wallpaper.bmp
del /q c:\temp\wallpaper.jpg

:fim
-------------------------------

Após o script é necessário definir na GPO que o papel de parede é o %userprofile%\Pictures\wallpaper.jpg

Como funciona
Ele verifica a resolução de tela e conforme a resolução copia um arquivo para o %userprofile%\Pictures\ , e a GPO usa esta imagem como padrão