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

powershell

Как завершить отключение сессии на серверах RDS и вывести список где пользователи не найдены на хостах но в брокере они есть.

 

 

# Функция для завершения 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 = $null
            $HashProps.Id = $CurrentLine[1]
            $HashProps.State = $CurrentLine[2]
            $HashProps.IdleTime = $CurrentLine[3]
            $HashProps.LogonTime = $CurrentLine[4..6] -join " "
            $HashProps.LogonTime 
Читать далее

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

Задача сделать для тп скрипт который опрашивает сервера по открытым портам , пингует их и делает tracert. И отправляет на почту результат.

# Добавьте в начало скрипта
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }

# Настройки Яндекс.Почты
$YandexTo = "moskvichev@yandex.ru" 
$YandexFrom = 'moskvichev@yandex.ru'
$YandexUser = "moskvichev@yandex.ru"
$YandexPass = "пароль из яндекс"
$YandexSmtpServer = 'smtp.yandex.ru'
$YandexPort = 587

# Получение информации о ПК и пользователе
$ComputerName = $env:COMPUTERNAME
$UserName = $env:USERNAME
$Domain = $env:USERDOMAIN

# Порты для проверки для каждого сервера
$ServerPorts = @{
    "vdi.adminbd.ru" = @(443)
    "zon01.adminbd.ru" = @(3389, 32111, 4172, 8443,443)
    "zon02.adminbd.ru" = @(3389, 32111, 4172, 8443,443)
}

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

Как перенести активных пользователей из одной коллекции в другую windows rds

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

# Import required modules
Import-Module ActiveDirectory
Import-Module RemoteDesktop

# Define RDS collection and groups
$collectionName = "Rec"
$sourceGroup = "G-Rec"
$destinationGroup = "G-Rec-fslogix"
$userLimit = 1 # Количество пользователей для переноса

# Get active users from RDS collection
try {
    Write-Host "Getting active users from RDS collection '$collectionName'..."
    $activeSessions = Get-RDUserSession -CollectionName $collectionName -ConnectionBroker MSK-HWRDCB02.voxys.ru
    
    if (-not $activeSessions) {
        Write-Host "No active sessions found in collection."
        exit
    }
    
    $activeUsers = $activeSessions | Select-Object -ExpandProperty UserName 
Читать далее

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

# Define group names
$sourceGroup = "G-Rec"
$destinationGroup = "G-Rec-fslogix"

# Import Active Directory module
Import-Module ActiveDirectory

try {
    # Get members from source group (first 50)
    $users = Get-ADGroupMember -Identity $sourceGroup | Select-Object -First 50
    
    if ($users.Count -eq 0) {
        Write-Host "No users found in the source group."
        exit
    }
    
    Write-Host "Found $($users.Count) users in the source group. Processing..."
    
    # Add users to destination group
    Add-ADGroupMember -Identity $destinationGroup -Members $users -ErrorAction Stop
    Write-Host "Successfully added users to destination group $destinationGroup"
    
    # Remove users from source group
    Remove-ADGroupMember -Identity $sourceGroup -Members $users -Confirm:$false -ErrorAction Stop
    Write-Host "Successfully removed users from 
Читать далее

Как вывести список пользователей 1с какую лицензию hasp использует пользователь.

Задача вывести список пользователей что бы узнать какой ключ hasp используется.

$RPHostPath = Get-Process -Name rphost | Select-Object -ExpandProperty Path -First 1
$Actual1CFolder = Split-Path $RPHostPath
Set-Location $Actual1CFolder

$cluster = .\rac.exe cluster list | Where-Object { $_ -match 'cluster' } | ForEach-Object { $_ -replace "^.*?: " }

$sessions = .\rac.exe session --cluster=$cluster list --licenses

# Парсим вывод rac.exe и преобразуем в объекты PowerShell
$sessionObjects = @()
$currentSession = @{}

foreach ($line in $sessions) {
    if ($line -match '^session\s*:\s*(.+)') {
        if ($currentSession.Count -gt 0) {
            $sessionObjects += [PSCustomObject]$currentSession
            $currentSession = @{}
        }
        $currentSession['Session'] = $matches[1].Trim()
    }
    elseif ($line -match '^(.+?)\s*:\s*(.+)') 
Читать далее

Как разблокировать (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
}

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

Как сбросить все сессии в статусе дисконект (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
            
Читать далее
Яндекс.Метрика