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

powershell

Как сделать автоматическую сверка VDI-доступа: как найти и убрать «осиротевшие» назначения в VMware/Omnissa Horizon в full машинах

modul omnisa powershell

В инфраструктуре VDI со временем неизбежно накапливается расхождение между тем, кому назначен доступ по правам (AD-группа), и тем, кто фактически занимает виртуальную машину в пуле. Причины разные: сотрудник уволился и его убрали из группы, но машину за ним забыли отвязать; произошла ручная правка в консоли Horizon в обход процесса; группа синхронизировалась с задержкой. Итог один — «осиротевшая» машина числится занятой человеком, у которого по факту уже нет прав на неё, а легитимные пользователи из группы простаивают без ресурса.

Ниже — рабочее решение на PowerShell из двух скриптов, которое находит такие расхождения автоматически, ведёт лог с историей за … Читать далее

Как сделать автоматическое назначение тегов бэкапа VMware по типу ОС через PowerCLI

Описание:
Скрипт на PowerShell/PowerCLI для VMware vCenter, который автоматически расставляет теги резервного копирования на виртуальные машины в зависимости от их имени и гостевой ОС. Включённые Windows-ВМ с доменными окончаниями (a.ru, b.ru, d.ru) получают свой отдельный тег бэкапа для каждого заказчика, все прочие включённые Linux-ВМ помечаются общим тегом «Linux Backup», а ВМ с тегом-исключением автоматически лишаются всех тегов бэкапа. Все параметры (адрес vCenter, датацентр, исключаемый кластер, названия тегов и масок имён) вынесены в один блок настроек в начале файла — менять логику скрипта не нужно. Есть встроенный безопасный тестовый режим: перед реальным изменением тегов скрипт может просто показать таблицу с планом … Читать далее

Как найти и безопасно удалить старые .bak/.trn файлы бэкапов MSSQL с помощью PowerShell

Описание

Готовый PowerShell-скрипт для администраторов баз данных и системных администраторов Windows, который помогает держать диски с бэкапами MSSQL в порядке. Скрипт находит файлы резервных копий (.bak, .trn, .dif) старше заданного количества дней, выводит их в виде таблицы с путём, датой изменения и размером (отсортировано от самых больших к самым маленьким), сохраняет отчёт в CSV и, при необходимости, удаляет найденные файлы с записью в лог.

Возможности скрипта:

  • поиск бэкапов старше N дней на любом указанном диске или в папке;
  • вывод результатов с сортировкой по размеру файла;
  • сохранение отчёта в CSV для аудита перед удалением;
  • гибкий список папок-исключений
Читать далее

Как делегировать права на редактирование gpo windows группе безопасности.

задача создать группу и дать права на редактирования gpo

<#
.SYNOPSIS
    Настраивает права группы для работы с GPO:
    - создание новых GPO;
    - редактирование существующих GPO (всех или точечно выбранных);
    - линковка GPO к OU (с наследованием на дочерние OU).

.DESCRIPTION
    ЧАСТЬ 1 (создание новых GPO):
        Добавляет группу в встроенную группу AD "Group Policy Creator Owners".
        Участники этой группы могут создавать новые GPO и автоматически
        становятся их владельцами/редакторами (но только тех, что создали
        сами - см. примечание ниже).

    ЧАСТЬ 2 (редактирование существующих GPO):
        Перебирает GPO в домене, проверяет, есть ли у группы право
        редактирования, и если нет - выдаёт его 
Читать далее

Как сделать «Автоматическую установку Cisco Secure Client, .NET 8 и VMware Horizon Client с помощью PowerShell»

Задача сделать автоматическую установку на клиентах вне домена

  • Проверяет доступность серверов vdi.adminbd.ru и so.adminbd.ru.
  • Устанавливает/настраивает Cisco Secure Client (с профилем link_adminbd_ru.xml, ярлыком на общем рабочем столе и preferences.xml с BlockUntrustedServers=false).
  • Устанавливает .NET 8 Desktop Runtime (при необходимости).
  • Устанавливает VMware Horizon Client с параметром VDM_Server=vdi.adminbd.ru.
  • Логирует все действия в %TEMP%\vdi-client-setup.log.
  • Требует права администратора (автоматически перезапускается с повышением).
  • После завершения всех операций перезагружает компьютер (с подтверждением пользователя).
#requires -Version 3.0

<#
.SYNOPSIS
    Автоматическая установка и запуск VMware Horizon Client.
.DESCRIPTION
    Скрипт проверяет доступность сервера so.admindb.ru (репозиторий установщиков),
    при необходимости устанавливает Cisco Secure Client, .NET 8 Runtime
    и VMware Horizon Client, после чего 
Читать далее

Как сделать скрипт для восстановления баз данных из шары.

Задача раз 2 недели восстанавливать базы данных на dev сервер. Бэкап сделаны с помощью ola.hallengren

-- В ночь с субботы на воскресение
--if(datepart(weekday, getdate()) = 1)
-- Для миграции на АГ сметили создание резервных копий для того что бы использовать верфицированые фулл бэкапы в процессе работ
-- В ночь с Пятницу на субботу  (В Субботу в 01.00 создать фулл бекап)

if(datepart(weekday, getdate()) = 7)
begin
    EXECUTE [dbo].[DatabaseBackup]
    @Databases = 'USER_DATABASES,-%_restore',
    @Directory = N'\\ARC03.adminbd.ru\sql_backup$',
    @BackupType = 'FULL',
    @Verify = 'Y',
    @Compress = 'Y',
    @CleanupTime = 312,
    @CleanupMode = 'AFTER_BACKUP',
    @CheckSum = 'Y',
    @LogToTable = 'Y',
    @DatabasesInParallel= 'Y';
end

Скрипт восстановления

# 
Читать далее

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