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

Как найти на серверах rds rdp ферме профили которые в статусе fslogix WaitingForWriteQueueFlush

На хостах терминальной фермы есть проблема что процесс fslogix держит cloud  profile

# Имя коллекции RDS, замените на своё
$collectionName = "Farm Fxlogixs"

# Получаем список серверов из коллекции (только имена)
$servers = Get-RDSessionHost -CollectionName $collectionName | Select-Object -ExpandProperty SessionHost

# Результаты
$result = @()

foreach ($server in $servers) {
    Write-Host "Подключаемся к серверу: $server" -ForegroundColor Cyan

    try {
        $disks = Invoke-Command -ComputerName $server -ScriptBlock {
            # Попытка получить диски FSLogix, которые ожидают записи
            Get-CloudCacheDisk
        } -ErrorAction Stop

        foreach ($disk in $disks) {
            if ($disk.State -eq "WaitingForWriteQueueFlush") {
                $result += [PSCustomObject]@{
                    Server      = $server
                    UserProfile = $disk.CachePath
                    State       = $disk.State
                
Читать далее

Как разблокировать (unblock) файл скаченный из сети на серверах в ad

Задача разблокировать файл на определённых сервера

# Импортируем модуль ActiveDirectory, если он не установлен
if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {
    Install-Module -Name ActiveDirectory -Force
}
Import-Module ActiveDirectory
 
# Фильтруем компьютеры, которые являются серверами (например, по имени или OU)
$servers = Get-ADComputer -Filter {name -like "*HWRDS*"} -Property Name | Select-Object -ExpandProperty Name
 
# Список файлов для разблокировки
$filesToUnlock = @("Zone.exe") # Добавьте здесь нужные вам файлы
 
function UnBlock-FilesOnRemoteServers {
    param (
        [string[]]$servers,
        [string[]]$files
    )
 
    foreach ($server in $servers) {
        Write-Host "Processing server: $server"
         
        # Убедимся, что сервер доступен
        if (Test-Connection -ComputerName $server -Count 1 -Quiet) {
            foreach ($file in $files) 
Читать далее

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

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

# Параметры
$sourceFile = "C:\1\nethasp.ini"
$destinationFolder = "C:\Program Files\1cv8\conf"
$adGroupName = "ComputerGroup"

# Проверка исходного файла
if (-not (Test-Path $sourceFile)) {
    Write-Host "❌ Ошибка: файл $sourceFile не найден!" -ForegroundColor Red
    exit 1
}

# Получаем список компьютеров из группы AD
try {
    $computers = Get-ADGroupMember -Identity $adGroupName | 
                 Where-Object { $_.objectClass -eq 'computer' } | 
                 Select-Object -ExpandProperty Name
    
    if (-not $computers) {
        Write-Host "❌ В группе '$adGroupName' нет компьютеров!" -ForegroundColor Red
        exit 1
    }
    Write-Host "✅ Найдено компьютеров: $($computers.Count)" -ForegroundColor Green
} catch {
    Write-Host "❌ Ошибка при получении списка из 
Читать далее

Как найти программу и версию с помощью powershell

Надо проверить установленную версию fslogix на серверах rds

<#
.SYNOPSIS
    Скрипт для проверки версий указанных программ на серверах AD с фильтрацией по имени
.DESCRIPTION
    Ищет указанную программу в реестре удаленных серверов и возвращает информацию о версии
.PARAMETER NameFilter
    Фильтр имен серверов (например, "*hwrdsh*")
.PARAMETER SoftwareName
    Название программы для поиска (например, "Microsoft FSLogix Apps")
.EXAMPLE
    .\Get-SoftwareVersionOnServers.ps1 -NameFilter "*hwrdsh*" -SoftwareName "Microsoft FSLogix Apps"
#>

param (
    [string]$NameFilter = "*hwrdsh*",
    [string]$SoftwareName = "Microsoft FSLogix Apps"
)

# Импорт модуля ActiveDirectory
try {
    Import-Module ActiveDirectory -ErrorAction Stop
}
catch {
    Write-Host "Ошибка при импорте модуля ActiveDirectory: $_" -ForegroundColor Red
    exit 1
}

# Функция 
Читать далее

Как мониторить ksmg с помощью zabbix

Задача мониторить ksmg  Версия: 2.1.1.8310 (2.1.1) на rocky linux . Так как ksmg основан на postfix начал копать в эту сторону. Делал по статье https://serveradmin.ru/monitoring-postfix-v-zabbix/ спасибо ему за это .

Шаблон для zabbix 7

zbx_export_templates

Сначала включил репозиторий

включаем репозиторий
 mcedit /etc/yum.repos.d/rocky.repo
[baseos]
enabled=1
[appstream]
enabled=1

Как мониторить ksmg с помощью zabbix

После выполните очистку кэша и обновление метаданных:

dnf clean all
dnf makecache

установка пакета:

dnf install -y postfix-pflogsumm

правим

mcedit /etc/logrotate.d/rsyslog

compress
missingok

/var/log/messages
{
    size 100M
    rotate 40
    sharedscripts
    postrotate
        /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
    endscript
}

/var/log/cron
{
    size 10M
    rotate 10
    sharedscripts
    postrotate
        /usr/bin/systemctl kill -s HUP 
Читать далее

Как сбросить все сессии в статусе дисконект (disconnect) с фермы rds windows

Задача разлогинить всех пользователей с фермы rds у которых статус disconnect и определение активного брокера, логирование с очищением логов

# Функция для завершения RDP-сессии
function Invoke-RDPSessionLogoff {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    logoff $SessionID /server:$ComputerName /v 2>&1
}

# Функция для получения списка залогиненных пользователей
Function Get-LoggedOnUser {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName="localhost"
    )
    $ErrorActionPreference = "Stop"
    Test-Connection $ComputerName -Count 1 | Out-Null
    quser /server:$ComputerName 2>&1 | Select-Object -Skip 1 | ForEach-Object {
        $CurrentLine = $_.Trim() -Replace "\s+"," " -Split "\s"
        $HashProps = @{
            UserName = $CurrentLine[0]
            ComputerName = $ComputerName
        }
        If ($CurrentLine[2] -eq "Disc") {
            $HashProps.SessionName = 
Читать далее

Как с помощью PowerShell посчитать сколько пользователей входит в группу где много вложенных групп

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

Import-Module ActiveDirectory

$mainGroup = "G-Terminal"
$global:allResults = @() # Используем глобальную переменную
$groupCache = @{}

function Get-GroupInfo {
    param (
        [string]$groupName,
        [string]$parentGroup = "",
        [int]$level = 0
    )
    
    # Проверяем кэш
    if ($groupCache.ContainsKey($groupName)) {
        return $groupCache[$groupName]
    }

    try {
        $group = Get-ADGroup -Identity $groupName -Properties Member
        $members = @(Get-ADGroupMember -Identity $groupName -ErrorAction Stop)
        
        $userCount = 0
        $nestedGroups = @()
        $totalUsers = 0

        # Считаем пользователей и вложенные группы
        foreach ($member in $members) {
            if ($member.objectClass -eq 'user') {
                $userCount++
            }
            elseif ($member.objectClass -eq 'group') {
                $nestedGroups += $member
            
Читать далее

Как через powershell проверить есть ли файл на файловых шарах или нет

Задача есть файл который лежит в одном месте и надо проверить если ли файл на других сетевых шарах и сделать сводную таблицу

# Параметры скрипта
$sourceFolder = "D:\buffer"  # Корневая папка для поиска MP4 файлов
$share1 = "\\Msk-fs\sm_06$" # Первая шара
$share2 = "\\Msk-fs\sm_05$" # Вторая шара
$csvReport = "C:\temp\comparison1.csv" # CSV файл с результатами

# Создаем коллекцию для хранения результатов
$results = @()

# Получаем все MP4 файлы из исходной папки (рекурсивно)
$mp4Files = Get-ChildItem -Path $sourceFolder -Filter "*.mp4" -Recurse -File
$totalFiles = $mp4Files.Count
$processed = 0

# Обрабатываем каждый файл
foreach ($file in $mp4Files) {
    $processed++
    # Преобразуем 
Читать далее

Как сделать gpo выключение windows 10 пк по бездействию в течение часа.

Задача экономить электричество. Выключать пк если на нем не работают в течение часа. Логика. у нас gpo которая блокирует экран по бездействию . От этого отталкивается скрипт проверяет заблокирован экран . если да то ведет отсчет от этого.

Сам скрипт проверки

# Определение порогов времени простоя (в секундах)
$shutdownIdleTimeLocked = 3600  # 1 час (3600 секунд) при заблокированном экране
$shutdownIdleTimeSystem = 3600  # 2 часа (7200 секунд) при отсутствии пользователя

# Путь к лог-файлу
$logPath = "C:\ProgramData\Scriptspoweroff"
$logFile = "$logPath\IdleShutdown.log"

# Создание папки для логов, если она не существует
if (-not (Test-Path -Path $logPath)) {
    New-Item -ItemType Directory -Path $logPath 
Читать далее

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

Первый скрипт 

Задача сделать синхронизацию логинов с праймери реплики в mssql на секондори реплики с проверкой паролей совпадают или нет . если не совпадают то скопировать логин с правильным паролем. Сделал проверку по хэшу паролей. Лог будет удаляться из папки старше 7 дней

Set-DbatoolsInsecureConnection -SessionOnly
# Параметры
$AGListenerName = "db01" # Имя листенера группы доступности
$LogFolder = "D:\DBA_scripts_AG\log"
$MaxLogAge = 7 # Максимальный возраст логов в днях

# Создаем папку для логов если не существует
if (-not (Test-Path $LogFolder)) {
    New-Item -ItemType Directory -Path $LogFolder -Force | Out-Null
}

# Удаляем старые логи (старше 7 дней)
Get-ChildItem -Path $LogFolder  | 
Читать далее
Яндекс.Метрика