1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
$user_name = read-host "имя пользователя" $start = read-host "дней назад" [datetime]$StartTime = (Get-date).adddays(-$start) $xls = Join-Path $env:USERPROFILE\Desktop "output.xlsx" $FilePath = "$env:USERPROFILE\Desktop\$Date`_RDP.csv" $LogFilter = @{ LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational' ID = 21, 23, 24, 25 StartTime = $StartTime } $AllEntries = Get-WinEvent -FilterHashtable $LogFilter $AllEntries | Foreach { $entry = [xml]$_.ToXml() if ($entry.Event.UserData.EventXML.User -like "DOMAIN\$user_name") { [array]$Output += New-Object PSObject -Property @{ TimeCreated = $_.TimeCreated User = $entry.Event.UserData.EventXML.User IPAddress = $entry.Event.UserData.EventXML.Address EventID = $entry.Event.System.EventID } } } $FilteredOutput += $Output | Select TimeCreated, User, ServerName, IPAddress, @{Name='Action';Expression={ if ($_.EventID -eq '21'){"Вход"} if ($_.EventID -eq '22'){"Запуск"} if ($_.EventID -eq '23'){"Выход"} if ($_.EventID -eq '24'){"Отключение"} if ($_.EventID -eq '25'){"Подключение"} } } $excel = New-Object -ComObject excel.application $workbook = $excel.workbooks.add() $sheet = $workBook.worksheets.Item(1) $i = 1 foreach($row in $FilteredOutput | Sort TimeCreated -Descending) { $excel.cells.item($i,1) = $row.TimeCreated $excel.cells.item($i,2) = $row.User $excel.cells.item($i,3) = $row.IPAddress $excel.cells.item($i,4) = $row.Action $i++ } $range = $sheet.UsedRange [void] $range.EntireColumn.Autofit() $excel.visible = $true $workbook.SaveAs($xls, 51) $workbook.Close() $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) |
Теперь совсем некрасиво не воспользоваться возможностью получения бесплатного доверенного сертификата SSL для почтового сервера Exchange., уже заботливо написан скрипт для получения, установки и создания задачи для автоматического обновления SSL сертификата задолго до окончания его срока.
1 |
.\wacs.exe --target manual --host mail.domain.ru,autodiscover.domain.ru --certificatestore My --installation iis,script --installationsiteid 1 --script "./Scripts/ImportExchange.ps1" --scriptparameters "'{CertThumbprint}' 'IIS,SMTP,IMAP' 1 '{CacheFile}' '{CachePassword}' '{CertFriendlyName}'" |
Жить стало лучше, жить стало веселей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
$HostName = "localhost" $Directory = "B:\" # Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme $CompressionLevel = "5" # Possible values: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month $Retention = "In1Week" $SMTPServer = "smtp.domain.ru" $EmailFrom = "veeam@domain.ru" $EmailTo = "admin@domain.ru" $EmailSubject = "Free Veeam Auto" $style = "<style>BODY{font-family: Arial; font-size: 10pt;}" $style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}" $style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }" $style = $style + "TD{border: 1px solid black; padding: 5px; }" $style = $style + "</style>" $MesssagyBody = @() Asnp VeeamPSSnapin $VMs = Find-VBRHvEntity | select -skip 2 foreach ($VM in $VMs) { $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords $FailedSessions = $TaskSessions | where {$_.status -eq "EWarning" -or $_.Status -eq "EFailed"} if ($FailedSessions -ne $Null) { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}}) } Else { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}}) } } $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo $Message.Subject = $EmailSubject $Message.IsBodyHTML = $True $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) $SMTP.Send($Message) |
По мотивам https://www.veeam.com/blog/ru/veeam-backup-free-edition-now-with-powershell.html
Формат файла:
1 2 |
DN,objectClass,mail "CN=Jon Smith,OU=staff,DC=contoso,DC=com",contact,j.smith@contoso.com |
Экспорт
1 2 |
csvde.exe -u -d "OU=staff,DC=contoso,dc=com" -r "(&(objectClass=user)(company=contoso))" -l "objectClass,userPrincipalName" -f contoso_contacts.csv (cat .\contoso_contacts.csv).replace("userPrincipalName","mail") | %{$_ -replace "user", "contact"} | %{$_ -replace "OU=staff,DC=contoso,dc=com","OU=slaves,DC=gontozo,dc=com"} > .\contoso_contacts_in_gontozo.csv |
Импорт
1 2 |
csvde -i -f contoso_contacts_in_gontozo.csv get-contact -organizationalunit slaves -RecipientTypeDetails Contact -Filter 'WindowsEmailAddress -ne $null' | %{ enable-mailcontact -Identity $_ -ExternalEmailAddress $_.WindowsEmailAddress.toString() } |

В одной конторе) жил сервер Exchange 2013 и был запасной сервер в запасной сети в запасном сайте, связаны сервера были между собой через VPN. Решил я добавить mailbox дабы получить успокоительный DAG. Бессмысленно было создавать отдельную сеть для репликации и добавлять вторые сетевые карты в виртуальные машины находящиеся на разных хостах в разных местах, соединенных через одну VPN. Я добавил DAG без IP адреса:
И все было было бы хорошо но при добавлении сервера в DAG я получал следующие: Read More

1. Загружаемся с любого установочного диска Windows до первого экрана
2. Жмем SHIFT + F10
3. В косоли пишем copy /y c:\windows\system32\sethc.exe c:\windows\system32\sethc.old
4. Ещё раз пишем copy /y c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe
5. Вынимаем установчный диск Windows
6. Перезагружаем компьютер
7. Жмём SHIFT пять раз
8. В консоле пишем net user имяпользователя пароль (/add; /active:{yes | no}
net group Администраторы имяпользователя /add
9. Заходим в систему
10. Меняем обратно copy /y c:\windows\system32\sethc.old c:\windows\system32\sethc.exe

Для того чтобы пользователи могли использовать для подключения к внутренним ресурсам сети c Active Directory свой почтовый адрес вместо имени пользователя во внутреннем домене, следует добавить user principal name suffix. Для этого: правой кнопкой по Active Directory Domains and Trusts – properties – alternative UPN suffix – add.
После этого нужно поменять UPN Suffixes для пользователей. Это можно сделать с помощью Powershell:
Read More

Windows 7 в отличие от XP по умолчанию не регистрирует записи PTR на DNS сервере если IP адрес был получен через DHCP, и следовательно если используется не MS DHCP то обратная зона не будет содержать динамических записей DNS клиентов Windows 7. Можно создать политику обязывающую DNS клиентов регистрировать PTR запси.
Read More

Работал у меня в конторе Microsoft SharePoint Foundation 2010, крутилась на нём телефонная книжка и пара папок с документами, работал, работал и перестал. Залезаю на сервер (2008 R2) а на диске C: места больше нет. Оказалось все съел лог SharePoint_Config_Log, который лежит в C:WindowsSYSMSISSEEMSSQL.2005MSSQL. Для того что бы его уменьшить можно поставить Microsoft SQL Server Management Studio Express и подключиться к \.pipeMSSQL$MICROSOFT##SSEEsqlquery
Read More

Для включения возможности удалённого подключения к доменным компам через PowerShell нада создать GPO содержащий два параметра:
первый, переводящий режим запуска службы Windows Remote Management (WS-Management) в Auto
Computer Configuration - Policies - Windows Settings -Security Settings - System Services - Windows Remote Management (WS-Management)
Automatic
Read More

Маленький скрипт показывающий пользователей AD не имеющих почтового адреса
1 2 3 4 5 6 |
$searcher = New-Object System.DirectoryServices.DirectorySearcher $users = ($searcher.findall() | where {$_.properties.objectcategory -like "CN=Person*"}) foreach ($user in $users) { $name = $user.properties.name $mail = $user.properties.mail if ($mail -like ""){$name}} |
Запретить использовать Skype в сети построенной на MS Active Directory можно с помощью групповых политик. Для это нужно создать правило запрещающее запуск приложения с определённым хешом исполняемого файла. Идем в Group Policy Management – Group Policy Objects правый клик – New и создаем новую политику с названием например skypeisfubar. Правый клик на skypeisfubar – Edit – Computer Configuration – Policies – Windows Settings – Security Settings – Software Restriction Policies правый клик – New Software Restriction Policies – Additional Rules – New Hash Rule. Создаем правило для хеша файла skype.exe и линкуем политику с контейнером содержащим компьютеры на которых нужно запретить запуск Skype. После применения политик (подождать или gpupdate /force) Skype запустить будет нельзя. Это работает только для определённого хеша файла и следовательно только для одной версии Skype (последняя на данный момент 5.3.0.111). Тут все файлы skype.exe версий начиная с 4,2.
Графический интерфейс Windows Server 2008 R2 Backup весьма скуден и приходиться пользоваться командной строкой. Для того что бы сделать простой бэкап всех данных сервера можно создать .bat файл с таки содержанием
wbadmin start backup -include:”c:,e:,f:,g:” -allCritical -backupTarget:\backupbackup -quiet >> \backupbackuplog.txt
и поставить его в расписание Task Scheduler
SCHTASKS /Create /SC WEEKLY /D <Day Of Week> /TN <TaskName> /RL HIGHEST /ST <StartTime> /TR <Windows Server Backup Command>
SCHTASKS /Create /SC WEEKLY /D SAT /TN WeeklySystemStateBackup /RL HIGHEST /ST 19:00 /TR “WBADMIN START SYSTEMSTATEBACKUP -backupTarget:I: -quiet >> C:backupLogs.txt “