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

powershell

Как с помощью 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++
    # Преобразуем 
Читать далее

Как узнать в 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) хранилище сертификатов.

Задача сделать импорт 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 
Читать далее

Как искать текст в файле с помощью PowerShell и сохранить путь и строку где этот текст встречается.

Задача найти все строки подключения oracl в конфиге web серверов

# Укажите путь к директории для поиска
$directoryPath = "C:\Sites"
 
# Укажите путь для выходного CSV файла
$outputCsv = "C:\Results.csv"
 
# Выполняем поиск только в файлах .conf и .txt
Get-ChildItem -Path $directoryPath -Recurse -File -Include *.config, *.json | `
    Select-String -Pattern "OracleClient" | `
    Select-Object @{Name="FilePath";Expression={$_.Path}},
                  @{Name="LineNumber";Expression={$_.LineNumber}},
                  @{Name="LineContent";Expression={$_.Line}} |
    Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8 -Delimiter ";"
 
Write-Host "Результаты сохранены в $outputCsv"

Как искать текст в файле с помощью PowerShell и сохранить путь и строку где этот текст встречается.

Как сделать архив почтового ящика exchange 2016 в pst перед удалением уз.

Задача сделать архив почтового ящика и архивов. Создать папку если нету , сделать логирование , проверку что почтовый ящик экспортировался в pst и отправить на api результат.

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MXS01.adminbd.ru/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -DisableNameChecking -AllowClobber



# Загрузка необходимых модулей
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
Import-Module ActiveDirectory

# Очистка памяти
[system.gc]::Collect()

#------ Переменные ------#
#исключение
$ExceptinUsers = 'sd','admins'
#
$OrgUnit      = "OU=Locations,DC=adminbd,DC=ru"
$domain       = "adminbd.ru"
$dt           = (Get-Date).AddDays(-30)
$Filter       = '(Enabled -eq $False) -and (Modified -le $dt)'
$dtstamp      = Get-Date -Format "yyyy-MM-dd-hh-mm-ss"
$dtstamp1     = "23012025_1"
$pattern      = '[/\\:?*<>"|]'
$exppath      = "\\ARC01\arc$\$dtstamp1"

# Создание директории для архивации
if (-not (Test-Path 
Читать далее

Как распространить reg файл на сервера.

# Задайте UNC-путь к reg-файлу в общей папке
$SharedRegFilePath = "\\h10\1$\tcagent.reg"

# Получите список серверов
$servers = Get-ADComputer -Filter 'Name -like "*H08*"' -SearchBase 'OU=Servers,DC=ADMINBD,DC=ru' | Select-Object -ExpandProperty Name

if (-not $servers) {
    Write-Host "Не найдено серверов, соответствующих фильтру." -ForegroundColor Red
    return
}

# Проверяем существование файла
if (-not (Test-Path $SharedRegFilePath)) {
    Write-Host "Файл не найден: $SharedRegFilePath" -ForegroundColor Red
    return
}

foreach ($server in $servers) {
    Write-Host "Обрабатывается сервер: $server" -ForegroundColor Cyan

    try {
        # Локально копируем файл на удаленный сервер
        $destinationPath = "\\$server\C$\Temp\tcagent.reg"
        if (-not (Test-Path "\\$server\C$\Temp")) {
            New-Item -ItemType Directory -Path "\\$server\C$\Temp"
        }

        Copy-Item -Path $SharedRegFilePath -Destination $destinationPath -Force
        
Читать далее

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