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

Как с помощью 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  | 
Читать далее

Как с помощью PowerShell скопировать remote app из одной коллекции в другую.

Задача создать коллекцию windows rds  и скопировать все приложения в неопубликованном виде все приложения remote app для дальнейшего использования.

$remoteApps=get-RDRemoteApp -ConnectionBroker HWRDC.adminbd.ru -CollectionName farm | Where-Object {$_.ShowInWebAccess -like "true" }


$remoteApps | ft -AutoSize


# Создаем новую переменную с измененным значением ShowInWebAccess
$newRemoteApps = $remoteApps | ForEach-Object {
    [PSCustomObject]@{
        CollectionName        = $_.CollectionName
        Alias                = $_.Alias
        DisplayName          = $_.DisplayName
        FilePath             = $_.FilePath
        ShowInWebAccess      = $false  # Меняем значение на False
        CommandLineSetting   = $_.CommandLineSetting
        RequiredCommandLine  = $_.RequiredCommandLine
        UserGroups           = $_.UserGroups
    }
}

# Проверяем результат
$newRemoteApps 


$farmfslogix=get-RDRemoteApp -ConnectionBroker hWRDC.adminbd.ru  -CollectionName 'Farm Fxlogixs' | Where-Object {$_.ShowInWebAccess -like "False" }




$missingApps = $newRemoteApps | 
Читать далее

Как узнать в exchange из Get-MessageTrackingLog емайл адреса ,извлечь емеил адреса из лога и проверить ящики включены и есть или переадресация.

Задача. есть почтовый домен. Надо избавиться от него и перенести адреса на другие почтовые сервера и сделать доверенный домен.
Сначала за 30 дней читаем логи. Распарсиваем их и забираем только event id send и recipients. Потом по ним проверяем есть ли ящик, включена переадресация и включена учетная запись или нет в ад.

# Подключение к Exchange PowerShell
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://MXS1.adminbd.ru/PowerShell/" -Authentication Kerberos
Import-PSSession $session


# Задаем период времени (30 дней назад до текущего момента)
$StartDate = (Get-Date).AddDays(-30)
$EndDate = Get-Date

# Получаем логи трекинга сообщений
$Logs = Get-MessageTrackingLog -Start $StartDate -End $EndDate -ResultSize Unlimited | 
    Select-Object 
Читать далее

Как настроить шифрование компьютеров на базе win 10 – 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

Задача включить шифрование с сохранением ключей в ad на Windows 10 и 11.

Сделал gpo bitlocker pc. Включил в gpo
Computer Configuration (Enabled) –  Policies -Administrative Templates
Windows Components/ BitLocker Drive Encryption

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

Windows Components/ BitLocker Drive Encryption/ Fixed Data Drives
Choose how BitLocker-protected fixed drives can be recovered Enabled

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

Enforce drive encryption type on fixed data drives

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

Windows Components/ BitLocker Drive Encryption/ Operating System Drives
Choose how BitLocker-protected operating system drives can be recovered

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

 

Configure use of hardware-based encryption for operating system drives

 

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

 

Enforce drive encryption type on operating system drives

 

Как настроить шифрование компьютеров на базе win 10 - 11 в Active Directory с помощью BitLocker , gpo и PowerShell c сохранением ключей

 

Require additional authentication at … Читать далее

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

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

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

# Определяем путь к OU
$ouPath = "AD:\OU=User Create ,OU=Users,OU=Locations,OU=Locations,DC=adminbd,DC=ru"

# Получаем текущий ACL для OU
$acl = Get-Acl $ouPath

# Указываем имя группы или пользователя
$groupName = "G-Create User"
$groupSID = (Get-ADGroup -Identity $groupName).SID

# Преобразуем SID в формат DOMAIN\AccountName
$identityReference = $groupSID.Translate([System.Security.Principal.NTAccount])

# Создаем ACE для прав ReadProperty, WriteProperty, ReadControl, WriteDacl
$ace1 = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $groupSID,
    [System.DirectoryServices.ActiveDirectoryRights] "ReadProperty, WriteProperty, ReadControl, WriteDacl",
    [System.Security.AccessControl.AccessControlType] "Allow",
    [Guid]::Empty,
    [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All"
)

# Создаем ACE для CreateChild, DeleteChild (для объектов типа User)
$ace2 = 
Читать далее

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов с помощью sccm.

Задача импортировать сертификат в личное хранилище компьютера через gpo этого сделать нельзя. Делаю через sccm packages.

Создаем packages

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов с помощью sccm.

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов с помощью sccm.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File ".\Install-Certificate.ps1"

 

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов с помощью sccm.

Сам Код Install-Certificate.ps1

# Computer name
$computerName = $env:COMPUTERNAME

# Start transcript logging
Write-Output "# Start transcript logging"
Start-Transcript -Path "\\путь\transcript_$computerName.txt" -Force

# Path to the certificate file
$certPath = "\\путь\srv.vpnpc.pfx"

#$password = "пароль"
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($password))


# Encoded password in Base64
$encodedPassword = "пароль" # This is "пароль" encoded in Base64

# Decode the password from Base64 and convert it to a secure string
$passwordBytes = [System.Convert]::FromBase64String($encodedPassword)
$passwordPlainText = [System.Text.Encoding]::UTF8.GetString($passwordBytes)
$password = $passwordPlainText | ConvertTo-SecureString -AsPlainText -Force

Читать далее

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов.

Задача сделать импорт pfx сертификата в личное хранилище \LocalMachine\My

Сделал gpo task scheduled

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов.

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов.

Как импортировать сертификат для компьютера в личное (personal\my) хранилище сертификатов.

 

Program

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Argument:

-ExecutionPolicy Bypass -File "\\путь\Install-Certificate.ps1"

Сам  Install-Certificate.ps1

# Computer name
$computerName = $env:COMPUTERNAME

# Start transcript logging
Write-Output "# Start transcript logging"
Start-Transcript -Path "\\путь\transcript_$computerName.txt" -Force

# Path to the certificate file
$certPath = "\\путь\Certificate_Deployment\pc.pfx"

#$password = "пароль"
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($password))


# Encoded password in Base64
$encodedPassword = "пароль" # This is "пароль" encoded in Base64

# Decode the password from Base64 and convert it to a secure string
$passwordBytes = [System.Convert]::FromBase64String($encodedPassword)
$passwordPlainText = [System.Text.Encoding]::UTF8.GetString($passwordBytes)
$password = $passwordPlainText | ConvertTo-SecureString -AsPlainText -Force

# Task name in 
Читать далее
Яндекс.Метрика