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

Как вывести размер всех баз в 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 = "tcell"
# Переменная для хранения целевых ресурсов
$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
        }
    }
Читать далее

Как в mssql узнать какие права на базы данных имеет пользователь.

Задача узнать на какие базы и какие права имеет определённый logon в mssql

-- Создаем временную таблицу для сохранения результатов
IF OBJECT_ID('tempdb..#UserMapping') IS NOT NULL
    DROP TABLE #UserMapping;

CREATE TABLE #UserMapping (
    DatabaseName NVARCHAR(128),
    LoginName NVARCHAR(128),
    UserName NVARCHAR(128),
    UserType NVARCHAR(128),
    DefaultSchema NVARCHAR(128),
    DatabaseRole NVARCHAR(128)
);

-- Динамический SQL для всех баз данных
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += '
USE [' + name + ']; 
INSERT INTO #UserMapping (DatabaseName, LoginName, UserName, UserType, DefaultSchema, DatabaseRole)
SELECT 
    ''' + name + ''' AS [DatabaseName], 
    sp.name AS [LoginName],
    dp.name AS [UserName],
    dp.type_desc AS [UserType],
    dp.default_schema_name AS [DefaultSchema],
    dp2.name AS [DatabaseRole]
FROM 
    
Читать далее

Как сделать шаг проверки первичной реплики в задании в 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         
Читать далее
Яндекс.Метрика