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

powershell

Как провести адудит паролей в 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
        }
    }
Читать далее

Как сделать шаг проверки первичной реплики в задании в always on

Задача в job сделать первым шагом проверку primary сервера

$StartTime = (Get-Date)
#Добавление шага проверки в джобы
$Sql_primary = 'db01'   # Первичная реплика
 
$JobNames =  Get-DbaAgentJob -SqlInstance $Sql_primary -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'
foreach ($JobName in $JobNames) {
 
$jobStep = @{
    SqlInstance = $Sql_primary
    Job = $JobName.Name
    StepId = 1
    StepName = "CheckAO"
    Subsystem = "TransactSql"
    Command = "--шаг в джобах для проверки аг
    IF (master.sys.fn_hadr_is_primary_replica ('beer') = 0)
    BEGIN
        EXEC msdb.dbo.sp_stop_job @job_id =  `$(ESCAPE_SQUOTE(JOBID))
    END"
    OnSuccessAction = "GoToNextStep"
    OnFailAction = "QuitWithFailure"
    Insert = $true
    #Force = $true
    }
 New-DbaAgentJobStep @jobStep
}
 
$EndTime = (Get-Date)
$TotalTime =$EndTime-$StartTime
$TotalTime.ToString()

 

Как бэкапить логины (login) и задания (JOB) mssql через dbatools

Задача настроить бэкап в папку включенных и отключённых job и login с mssql

Set-DbatoolsInsecureConnection -SessionOnly
$StartTime = (Get-Date)
$AGLSN = 'db01' #'msk-dblistener' # имя листенера группы доступности
$ExcludeJobs = ''
$ExcludeLogins = ''
$BackupPath = '\\ARC03\sql_backup$\' # В конце обязательно должен стоять "\"
$CurrDate = (Get-Date -Format 'yyyy.MM.dd.HH.mm')

$PrimaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary

# Папки для хранения бэкапов
$BackupDisabledJobPath = $BackupPath + $primaryReplica.Name + '\BackupDisabledJob'  # Папка для выключенных джобов
$BackupEnabledJobPath = $BackupPath + $primaryReplica.Name + '\BackupEnabledJob'  # Папка для включённых джобов
$BackupDisabledLoginPath = $BackupPath + $primaryReplica.Name + '\BackupDisabledLogin'  # Папка для выключенных логинов
$BackupEnabledLoginPath 
Читать далее

Как синхронизировать обьекты в always on c первичной реплики на вторичную

$StartTime = (Get-Date)
#Копируем все объекты силой (-force), хорошо выполнять раз в сутки
$AGLSN = 'shr-db01'
  
$primaryReplica =    Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary
 
      
$secondaryReplicas | ForEach-Object {
         
 
    Copy-DbaAgentJobCategory -Source $primaryReplica.Name -Destination $_.Name -Force   | Select-Object DateTime, Type, DestinationServer, name, status, Notes | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File C:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
    Copy-DbaAgentOperator -Source $primaryReplica.Name -Destination $_.Name -Force      | Select-Object DateTime, Type, DestinationServer, name, status, Notes | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File C:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
    Copy-DbaAgentAlert -Source $primaryReplica.Name -Destination $_.Name -Force         
Читать далее

Как в always on mssql синхронизировать JOB на вторичной реплики и удалять JOB со вторичной когда удалили на первичной.

задача с primary always on копировать JOB на secondary  реплику.

Set-DbatoolsInsecureConnection -SessionOnly
$StartTime = (Get-Date)

# Скрипт проверяет джобы и копирует их на вторичные реплики, если их там нет по имени.
$AGLSN = 'shr-db01'
 
$primaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary

# Получение списка джобов на первичной реплике, исключая указанные системные задания
$JobsOnPrimary = Get-DbaAgentJob -SqlInstance $primaryReplica.Name -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'

# Обработка каждой вторичной реплики
$secondaryReplicas | ForEach-Object {
    
    $JobsOnSecondary = Get-DbaAgentJob -SqlInstance $_.Name -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'

    
    # Найдем джобы, которые есть на 
Читать далее

Как в always on mssql синхронизировать логины и пароль на вторичной реплики и удалять логины когда удалили на первичной.

Задача синхронизировать копировать логины с первичной реплики на вторичную и так же удалять логины на вторичной реплики если удалили логин на первичной.

Set-DbatoolsInsecureConnection -SessionOnly
$StartTime = (Get-Date)

$AGLSN = 'db01'
 
$primaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary
$secondaryReplicas.name
# Получение логинов на первичной реплике
$LoginsOnPrimary = Get-DbaLogin -SqlInstance $primaryReplica.Name  -ExcludeSystemLogin

# Обработка каждой вторичной реплики
$secondaryReplicas | ForEach-Object {
    
    $LoginsOnSecondary = Get-DbaLogin  -SqlInstance $_.Name -ExcludeSystemLogin
    
    # Найдем логины, которые отсутствуют на вторичной реплике, но есть на первичной
    $diffToAdd = $LoginsOnPrimary | Where-Object Name -notin ($LoginsOnSecondary.Name)
    
    # Найдем 
Читать далее

Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.

Задача всех разогнать пользователей со статусом дисконект с серверов.

param (
    # Импортировать модуль Active Directory для Get-ADComputer CmdLet
    [string]$UserName = $null
)

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

# Запрос Active Directory для включенных учетных записей компьютеров серверов Windows и сортировка по имени
$Servers = Get-ADComputer -Filter  {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True") } | Sort Name

#Get-ADComputer -Filter   {(Name -like "FS*") -and (Enabled -eq "True") } | Sort Name


 #{(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")
 


# Инициирующие переменные
$SessionList = $NULL
$queryResults = $NULL
$SError = $null
$SDown = $null
$z = 0

# Получить 
Читать далее

Как посмотреть кто залогинен на серверах в сети powershell

задача проверить кто активен на серверах в сети

# Список серверов
$servers = (Get-AdComputer  -properties lastLogonDate -Filter  {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).name
# Результаты
$loggedInUsers = @()

foreach ($server in $servers) {
    # Проверяем доступность сервера
    $ping = Test-Connection -ComputerName $server -Count 1 -Quiet
    
    if ($ping) {
        try {
            # Выполняем команду qwinsta на удаленном сервере
            $output = qwinsta /server:$server

            if ($null -eq $output) {
                Write-Host "Не удалось получить данные с сервера: $server"
                continue
            }

            # Получаем названия колонок и их позиции из заголовка
            $columns = [regex]::Matches($output[0],'(?<=\s)\w+')

            # Обрабатываем каждую строку, пропуская заголовок
            $output | Select-Object 
Читать далее

Как вывести всех пользователей которые состоят в определённых группах и отпаривать уведомление email и обойти ограничение Get-ADGroupMember : The size limit for this request was exceeded

Задача сделать список пользователей которые состоят в определённых группах и обойти ограничение Get-ADGroupMember : The size limit for this request was exceeded

Import-Module ActiveDirectory
[system.gc]::Collect()

#------ Logging section ------#



$fileLocation = (gi $MyInvocation.InvocationName) | ForEach-Object {
$fileDirectory = "$($_.DirectoryName)\$($_.BaseName)";
"$fileDirectory\$($_.BaseName)_$('{0:yyyy-MM-dd}'-f(date)).csv";
if (!(Test-Path "$fileDirectory")) {
ni "$fileDirectory" -ItemType "directory" | Out-Null
}
}


$Domain = "admin.ru"
$Sender = "hel@admin.ru"
$smtpserver = "m.admin.ru"



# Определить базу поиска
$searchBase = "OU=Locations,DC=admin,DC=ru"

# Найти всех отключенных пользователей в указанном OU
$disabledUsersInOU = Get-ADUser -Filter * -SearchBase $searchBase

# Создать объект DirectorySearcher для поиска групп по шаблону
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.SearchRoot = New-Object DirectoryServices.DirectoryEntry("LDAP://DC=admin,DC=ru")
Читать далее
Яндекс.Метрика