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

powershell

Как удалить у пользователя все группы кроме domain user

задача удалить у отключённых пользователей группы кроме user domain

$logfile = "C:\Users\userDesktop\user-groups-log.txt"

# Отключаем запрос на подтверждение при удалении из групп, и вывод ошибок.
$ConfirmPreference = "None"
$ErrorActionPreference = "SilentlyContinue"

# Запишем в лог время начала работы скрипта для удобства поиска по дате
Write-Output "Дата удаления: $(Get-Date -Format F)" >> $logfile
Write-Output "" >> $logfile

# Подключаем модуль ActiveDirectory
Import-Module ActiveDirectory

# Находим всех отключенных пользователей
$users = Get-ADUser -Filter 'Enabled -eq $false' -SearchBase "OU=Locations,DC=admin,DC=ru"
$users | ft Enabled,SamAccountName

# И для каждого из них выполняем цыкл
foreach ($user in $users) {

# Если пользователь состоит более чем в одной 
Читать далее

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

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

# Определить базу поиска
$searchBase = "OU=Locations,DC=admin,DC=ru"

# Найти всех отключенных пользователей в указанном OU
$disabledUsersInOU = Get-ADUser -Filter {Enabled -eq $false} -SearchBase $searchBase

# Создать объект DirectorySearcher для поиска групп по шаблону
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.SearchRoot = New-Object DirectoryServices.DirectoryEntry("LDAP://DC=admin,DC=ru")
$searcher.Filter = "(&(objectClass=group)(name=*indeed*)(name=*G-VPN*))"
$searcher.PageSize = 1000

# Найти все группы, соответствующие шаблонам
$targetGroups = $searcher.FindAll()

foreach ($group in $targetGroups) {
    $groupEntry = $group.GetDirectoryEntry()
    $groupMembers = @()

    try {
        # Получить всех членов группы
        $members = $groupEntry.Properties["member"]
        $groupMembers += $members
    } catch {
        Write-Host "Error retrieving members for group $($groupEntry.Properties["name"].Value): $_"
    }

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

Как настроить ilo через powershell hpeilocmdlets

Задача настроить ilo. серверов много. Надо настроить dns, выпустить сертификат , ntp , email , name host ilo, syslog, smtp

Для начала установим hpeilocmdlets

Устанавливаем HPiLOCmdlet

Оставлю локально вдруг что та смениться.  HPiLOCmdlets-x64

После установки

Import-Module HPiLOCmdlets

или

Install-Module -Name HPEiLOCmdlets

Если не хватает прав на запуск

Set-ExecutionPolicy RemoteSigned

Если ошибки

Install-PackageProvider Nuget –Force


Install-Module –Name PowerShellGet –Force


Update-Module -Name PowerShellGet

После этого возьмем настройки с эталонного сервера где настроен лдап и группы

$ILOIp = "172.16.35.20"
$UserName = "iloadmin"
#[securestring]
$Pass="pasword"

get-HPiLODirectory -Server $ILOIp -Username $UserName -Password $pass -DisableCertificateAuthentication

Делаем хмл файл

<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<DIR_INFO MODE="write">
<MOD_DIR_CONFIG>
Читать далее

Как узнать кто давно не подключался к почтовому ящику в exchange.

Задача вывести кто давно не подключался к почтовому ящику в exchange 2016

Function New-Array {,$args}
$Report = New-Array

$days = "30"

$date_last = (Get-Date).AddDays(-$days) 
$mailboxes = Get-Mailbox  -ResultSize unlimited

foreach($mailbox in $mailboxes) 
{ 
  $mbx_DN = $mailbox.DistinguishedName 
  $email = $mailbox.PrimarySmtpAddress.toString()
  $Stat = Get-MailboxStatistics -Identity $mbx_DN | Where-Object {$_.lastLogonTime -lt $date_last -and $_.LastLogonTime -ne $null }  |`
  Select-Object DisplayName,  @{Name="TotalItemSizeGB"; Expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1GB),0)}},LastLogonTime,DatabaseName,DatabaseProhibitSendReceiveQuota

 if ($Stat){
  $tmp = New-Object System.Object
  $tmp | Add-Member -type NoteProperty -name DisplayName -value $($stat.DisplayName)
  $tmp | Add-Member -type NoteProperty -name Email -value $email
  $tmp | Add-Member -type NoteProperty -name TotalSize_MB -value $($stat.TotalItemSizeGB)
  $tmp | Add-Member -type NoteProperty -name LastLogon 
Читать далее

Как найти кому принадлежат несвязанные объекты vSAN Virtual Objects Unknown object type через powershell powercli

Ошибка на vmware vsan Unknown object type

Как найти кому принадлежат несвязанные объекты vSAN Virtual Objects Unknown object type через powershell powercli

Прежде чем чистить надо найти что за файлы и кому принадлежат

$vcenter = "vcsa01"
Connect-VIServer $vcenter
$Datacenter_name = "Mos*"

$ClusterName= `
Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -like 'CL01' } 


$clusterView = Get-Cluster $ClusterName
$ClusterMoRef = $Clusterview.ExtensionData.MoRef
$vmhost = ($clusterView | Get-VMHost) #| select -First 1
$vsanIntSys = Get-View $vmhost.ExtensionData.configManager.vsanInternalSystem

$vsanClusterObjectSys = Get-VsanView -Id VsanObjectSystem-vsan-cluster-object-system
$results = (($vsanClusterObjectSys.VsanQueryObjectIdentities($clusterMoRef,$null,$null,$true,$true,$false)).Identities | where {$_.Vm -eq $null})


foreach ($result in $results) {
$jsonResult = ($vsanIntSys.GetVsanObjExtAttrs($result.Uuid)) | ConvertFrom-JSON
foreach ($object in $jsonResult | Get-Member) {
if($($object.Name) -ne "Equals" -and $($object.Name) -ne "GetHashCode" -and $($object.Name) -ne "GetType" 
Читать далее

Как обновить политику адресов электронной почты и скрипт для удаление дополнительных псевдонимов из OU.

Задача при переноси уз с почтовыми адресами (adminbd.ru) в ou на которую назначена политика адресов электронной, необходимо обновить политику что бы создался новый псевдоним (alias email) и удалить старый email адрес.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
 Get-EmailAddressPolicy name | Update-EmailAddressPolicy
 
Get-EmailAddressPolicy (имя политики) | Update-EmailAddressPolicy
$ouName = "НазваниеOU"
$domainToRemove = "adminbd.ru"
$logFilePath = "C:\Scripts\delet_alias_LGC\log.txt"
Remove-item $logFilePath
$emailAddresses1 = Get-Mailbox -OrganizationalUnit $ouName -ResultSize Unlimited
$emailAddresses1 = $emailAddresses1 | Where-Object { $_.PrimarySmtpAddress -notlike "*@adminbd.ru" }
 
foreach ($user in $emailAddresses1) {
    $voxysAddresses = $user.EmailAddresses -split ',' | Where-Object { $_ -like "smtp:*@$domainToRemove" }
    $voxysAddresses = $adminbdAddresses -replace "^smtp:", ""
 
    if ($voxysAddresses.Count -ge 1) {
        # Удаляем 
Читать далее

Как найти включённого локального администратора на серверах в AD.

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

# Получить список всех серверов в AD
$computers = Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"} -Properties Name
 
# Определить имя пользователя, который будет использоваться для выполнения удаленных команд
$credential = Get-Credential
 
# Создать массив для хранения результатов
$results = @()
 
# Пройти по списку серверов и выполнить команду на каждом из них
foreach ($computer in $computers) {
    $computerName = $computer.Name
 
    # Проверить доступность сервера
    if (Test-Connection -ComputerName $computerName -Count 1 -Quiet) {
        $session = New-PSSession -ComputerName $computerName -Credential $credential
 
        # Искать учетную запись локального администратора
        $localAdmin = Invoke-Command -Session 
Читать далее

Как найти где в AD на серверах включен smbv1 и smbv2

Задача найти где включен smb старый протокол 1 и 2 на серверах в сети

https://techcommunity.microsoft.com/t5/storage-at-microsoft/configure-smb-signing-with-confidence/ba-p/2418102

https://learn.microsoft.com/en-US/windows-server/storage/file-server/troubleshoot/detect-enable-and-disable-smbv1-v2-v3?tabs=server

# Получение списка серверов
$serverList = Get-ADComputer -Filter {OperatingSystem -like "Windows Server*"} | Select-Object -ExpandProperty Name

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

# Проход по каждому серверу
foreach ($server in $serverList) {
    $serverStatus = Test-Connection -ComputerName $server -Count 1 -Quiet

    if ($serverStatus) {
        $smbStatus = Invoke-Command -ComputerName $server -ScriptBlock {
            Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
        }

        # Добавление результатов в массив
        $results += [PSCustomObject]@{
            ServerName = $server
            IsOnline = $true
            SMBv1Enabled = $smbStatus.EnableSMB1Protocol
            SMBv2Enabled = $smbStatus.EnableSMB2Protocol
        }
    }
    else {
        # Если 
Читать далее

Как синхронизировать папку с помощью PowerShell с фильтром по AD и запустить синхронизацию одновременно со всеми серверами.

Задача синхронизировать одну папку со множеством сервером. Делается это для распространения базы Касперского на удалённые площадки.

function Write-Log {
    param (
        [string]$Message
    )

    # Получение текущей даты и времени
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    
    # Форматирование сообщения в формате "дата время: сообщение"
    $logMessage = "{0}: {1}" -f $timestamp, $Message
    
    # Запись сообщения в лог-файл
    $logMessage | Out-File -FilePath "D:\Programs\replica_kasper\Log.txt" -Append
}

# Установите модуль PSParallel, если у вас его нет
if (-not (Get-Module -Name PSParallel -ListAvailable)) {
    Install-Module PSParallel -Scope CurrentUser
}

# Загрузите модуль PSParallel
Import-Module PSParallel

# Получение списка серверов из AD
$servers = Get-ADComputer -Filter {OperatingSystem 
Читать далее

Как удалить из папки файлы с серверов ad им перезапустить службу.

Задача удалить старые сертификаты из папки после этого перезапустить службу.

# Загрузка модуля ActiveDirectory
Import-Module ActiveDirectory

# Получение списка серверов из AD
$servers = Get-ADComputer -Filter {OperatingSystem -like "*Server*"} | Select-Object -ExpandProperty Name

# Путь к папке, из которой нужно удалить файлы
$folderPath = "C$\ProgramData\VMware\Log Insight Agent\cert"



# Проход по каждому серверу
foreach ($server in $servers) {
    $serverPath = "\\$server\$folderPath"
    
    # Проверка существования папки на сервере
    if (Test-Path $serverPath) {
        # Удаление файлов
        Get-ChildItem -Path $serverPath | Remove-Item -Force
        
        # Перезапуск службы LogInsightAgentService
        Get-Service -Name LogInsightAgentService -ComputerName $server  | Restart-Service -Force
        
        # Перезапуск службы LogInsightAgentUpdaterService
       Get-Service -Name LogInsightAgentUpdaterService   -ComputerName $server  
Читать далее
Яндекс.Метрика