Перейти к содержимому

Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS.

Задача всем пользователям сделать событие в календаре занят на целый день каждую среду в течении года. Сделал скрипт на PowerShell через ews. exchange 2016.

По умолчанию в exchange 2016  есть ews его ставить нет необходимости если скрипт запустить с самого сервера exchange. Путь “C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll

Если запускать с другого места надо установить ews

Install-Package Exchange.WebServices.Managed.Api

Путь C:\Program Files\PackageManagement\NuGet\Packages\Exchange.WebServices.Managed.Api.2.2.1.2\lib\net35

Добавить прав на exchange от кого будете запускать скрипт

Get-ManagementRoleAssignment -Role ApplicationImpersonation
New-ManagementRoleAssignment –Name:ImpersonationAssignment –Role:ApplicationImpersonation –User:moskvichev@adminbd.ru

Сам скрипт

Add-Type -Path "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll"

# Учетные данные администратора
$AdminEmail = "moskvichev@adminbd.ru"
$Password = "pass"
$Creds = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($AdminEmail, $Password)

# Подключение к 
Читать далее

Как распространить reg файл на сервера.

# Задайте UNC-путь к reg-файлу в общей папке
$SharedRegFilePath = "\\h10\1$\tcagent.reg"

# Получите список серверов
$servers = Get-ADComputer -Filter 'Name -like "*H08*"' -SearchBase 'OU=Servers,DC=ADMINBD,DC=ru' | Select-Object -ExpandProperty Name

if (-not $servers) {
    Write-Host "Не найдено серверов, соответствующих фильтру." -ForegroundColor Red
    return
}

# Проверяем существование файла
if (-not (Test-Path $SharedRegFilePath)) {
    Write-Host "Файл не найден: $SharedRegFilePath" -ForegroundColor Red
    return
}

foreach ($server in $servers) {
    Write-Host "Обрабатывается сервер: $server" -ForegroundColor Cyan

    try {
        # Локально копируем файл на удаленный сервер
        $destinationPath = "\\$server\C$\Temp\tcagent.reg"
        if (-not (Test-Path "\\$server\C$\Temp")) {
            New-Item -ItemType Directory -Path "\\$server\C$\Temp"
        }

        Copy-Item -Path $SharedRegFilePath -Destination $destinationPath -Force
        
Читать далее

Как сгенерировать скрипт AUTOGROW включить автоматического увеличения всех файлов

DECLARE @Sql NVARCHAR(MAX);
DECLARE @DbName NVARCHAR(128);
 
-- Удаление временных таблиц, если они уже существуют
IF OBJECT_ID('tempdb..#DatabaseFG') IS NOT NULL DROP TABLE tempdb..#DatabaseFG;
IF OBJECT_ID('tempdb..#SysFiles') IS NOT NULL DROP TABLE tempdb..#SysFiles;
IF OBJECT_ID('tempdb..#DatabaseList') IS NOT NULL DROP TABLE tempdb..#DatabaseList;
 
-- Создание временных таблиц
CREATE TABLE #DatabaseFG (
    DatabaseName NVARCHAR(128),
    FG_name NVARCHAR(128),
    data_space_id INT,
    type NVARCHAR(128),
    is_default INT,
    is_autogrow_all_files INT
);
 
CREATE TABLE #SysFiles (
    DatabaseName NVARCHAR(128),
    FileName NVARCHAR(128),
    FileSizeMB DECIMAL(18, 2),
    SpaceUsedMB DECIMAL(18, 2),
    FreeSpaceMB DECIMAL(18, 2)
);
 
CREATE TABLE #DatabaseList (
    DatabaseName NVARCHAR(128)
);
 
-- Курсор для обхода баз данных
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE name 
Читать далее

Как сгенерировать скрипт для создание файловых групп

DECLARE @Sql NVARCHAR(MAX);
DECLARE @DbName NVARCHAR(128);
 
-- Удаление временных таблиц, если они уже существуют
IF OBJECT_ID('tempdb..#DatabaseFG') IS NOT NULL DROP TABLE tempdb..#DatabaseFG;
IF OBJECT_ID('tempdb..#SysFiles') IS NOT NULL DROP TABLE tempdb..#SysFiles;
IF OBJECT_ID('tempdb..#DatabaseList') IS NOT NULL DROP TABLE tempdb..#DatabaseList;
 
-- Создание временных таблиц
CREATE TABLE #DatabaseFG (
    DatabaseName NVARCHAR(128),
    FG_name NVARCHAR(128),
    data_space_id INT,
    type NVARCHAR(128),
    is_default INT,
    is_autogrow_all_files INT
);
 
CREATE TABLE #SysFiles (
    DatabaseName NVARCHAR(128),
    FileName NVARCHAR(128),
    FileSizeMB DECIMAL(18, 2),
    SpaceUsedMB DECIMAL(18, 2),
    FreeSpaceMB DECIMAL(18, 2)
);
 
CREATE TABLE #DatabaseList (
    DatabaseName NVARCHAR(128)
);
 
-- Курсор для обхода баз данных
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE name 
Читать далее

Как вывести размер всех баз в mssql с файловыми группами и Space Use Free Space Свободное место

DECLARE @Sql NVARCHAR(MAX)
DECLARE @DbName NVARCHAR(128)
 
-- Курсор для обхода баз данных
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb') AND state_desc = 'ONLINE' -- Исключаем системные базы данных
 
-- Удаление временных таблиц, если они уже существуют
IF OBJECT_ID('tempdb..#DatabaseFG') IS NOT NULL
BEGIN
    DROP TABLE tempdb..#DatabaseFG;
END

IF OBJECT_ID('tempdb..#SysFiles') IS NOT NULL
BEGIN
    DROP TABLE tempdb..#SysFiles;
END
 
-- Создание временных таблиц
CREATE TABLE #DatabaseFG (
    DatabaseName NVARCHAR(128),
    FG_name NVARCHAR(128),
    data_space_id INT,
    type NVARCHAR(128),
    is_default INT,
    is_autogrow_all_files INT
);

CREATE TABLE #SysFiles (
    DatabaseName NVARCHAR(128),
    FileName NVARCHAR(128),
    FileSizeMB DECIMAL(18, 2),
    SpaceUsedMB DECIMAL(18, 2),
    
Читать далее

Как распространить reg файл на контролёры домена с помощью powershell

Задача импортировать ветку реестра на контролёры домена

# Задайте UNC-путь к reg-файлу в общей папке
$SharedRegFilePath = "\\rd\1$\dc.reg"

# Получите список контроллеров домена
$DomainControllers = Get-ADDomainController -Filter  *  | Where-Object -Property HostName -notlike shr*  | Select-Object -ExpandProperty HostName 

# Импортируем reg-файл на каждом контроллере домена
foreach ($DC in $DomainControllers) {
    Write-Host "Обрабатывается контроллер домена: $DC" -ForegroundColor Cyan

    # Выполняем reg import с использованием сетевого пути
    Invoke-Command -ComputerName $DC -ScriptBlock {
        param($FilePath)
        Start-Process -FilePath "reg.exe" -ArgumentList "import $FilePath" -Wait -NoNewWindow
        Write-Host "Файл реестра успешно импортирован: $FilePath" -ForegroundColor Green
    } -ArgumentList $SharedRegFilePath
}

Write-Host "Применение reg-файла завершено на всех контроллерах домена." -ForegroundColor 
Читать далее

Как пропинговать и проверить сервера на доступность smb порта и админской шары admin$.

Задача проверить сервера в сети на доступность smb и admin$

# Путь к файлу с серверами
$csvPath = "C:\Temp\not client.csv"
# Импорт данных из CSV
$servers = Import-Csv -Path $csvPath

# Проход по каждому серверу из списка
foreach ($server in $servers) {
    # Извлекаем имя сервера из колонки "Name"
    $serverName = $server.Name

    # Инициализируем переменные
    $ipAddress = ""
    $smbPortStatus = "Порт SMB недоступен"
    $adminShareStatus = "Шара admin$ недоступна"

    # Получаем IP-адрес
    try {
        $ipAddress = (Resolve-DnsName -Name $serverName -ErrorAction Stop).IPAddress
    } catch {
        $ipAddress = "IP не найден"
    }

    # Проверяем доступность сервера
    if (Test-Connection -ComputerName $serverName -Count 1 -Quiet) 
Читать далее

Как удалить сохранённые пароли из windows.

Задача удалить сохранённые пароли из windows от пользователя

первый вариант

# Получаем все строки из cmdkey
$credentials = cmdkey /list

$searchTerm = "adminbd"
# Переменная для хранения целевых ресурсов
$target = ""

# Проходим по всем строкам и ищем нужные
foreach ($cred in $credentials) {
    Write-Host "Текущая строка: $cred"  # Выводим каждую строку для диагностики
    
    # Если строка содержит "Target", сохраняем целевой ресурс
    if ($cred -match "Target: (.*)") {
        $target = $matches[1].Trim()
        Write-Host "Найден целевой ресурс: $target"
    }

    # Если строка содержит $searchTerm, то удаляем соответствующий целевой ресурс
    if ($cred -match $searchTerm) {
        Write-Host "Найдена строка с tcell: $cred"  # 
Читать далее

Как провести адудит паролей в windows ad

Задача провести аудит слабых паролей.

PasswordDict

# Получаем дату в формате dd.MM.yyyy(HH.mm)
$datA = Get-Date -Format "dd.MM.yyyy(HH.mm)"
$DC = "ad01"
$Domain = "DC=admin,DC=ru"
$Pth = "C:\tmp\PasswordQuality\"
$Pfile = "$Pth" + "AD_PSSW_$datA.csv"
$DictFile = "$Pth" + "PasswordDictbac.txt"
$OUsss = '*DC=admin,DC=ru'
$strBlankPasswordNThash = '31d6cfe0d16ae931b73c59d7e0c089c0'
$intBadPasswordsFound = 0

# Проверка существования файла словаря
If (Test-Path $DictFile) {
    Write-Output "Файл словаря найден: $DictFile"
} else {
    Write-Error "Файл словаря $DictFile не найден. Проверьте путь."
    exit
}

# Функция для вычисления NTLM-хеша из текста
Function Get-NTHashFromClearText {
    Param ([string]$ClearTextPassword)
    # Замените ConvertTo-NTHash на свой способ получения хеша, если нужно
    Return ConvertTo-NTHash $(ConvertTo-SecureString $ClearTextPassword -AsPlainText -Force)
Читать далее

Как вывести пользователей которые состоят в административных группах domain admin, enterprise admin, schema admin

# Импортируем модуль Active Directory
Import-Module ActiveDirectory

# Определяем группы
$groups = "Domain Admins", "Enterprise Admins", "Schema Admins"

# Создаем пустой массив для хранения пользователей
$allUsers = @()

# Получаем пользователей из каждой группы
foreach ($group in $groups) {
    $members = Get-ADGroupMember -Identity $group
    foreach ($member in $members) {
        # Получаем информацию о пользователе и фильтруем по "Password Never Expires"
        $user = Get-ADUser -Identity $member.SamAccountName -Properties PasswordNeverExpires
        if ($user.PasswordNeverExpires -eq $true) {
            # Создаем новый объект с необходимыми свойствами
            $userInfo = [PSCustomObject]@{
                Name                  = $user.Name
                SamAccountName        = $user.SamAccountName
                Group                 = $group
                PasswordNeverExpires   = $user.PasswordNeverExpires
            }
            $allUsers += $userInfo
        }
    }
Читать далее
Яндекс.Метрика