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

powershell

Как с помощью powershell через групповые политики узнать на каких пк нужно дефрагментировать диск и время выполнения политик

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

Написал скрипт и засунул в запланированное задание с помощью групповой политики скрипт

$name=hostname
$Yesterday = (Get-Date) - (New-TimeSpan -Day 2)
get-WinEvent -LogName "Microsoft-Windows-GroupPolicy/Operational"  | Where-Object {$_.ID -like ‘800*’} |  Where-Object {$_.TimeCreated -ge $Yesterday }|  Export-Csv \\имя сервера\test\gpo\$name.csv -Delimiter ";" -Encoding UTF8
$vols = Get-WmiObject  Win32_Volume -filter "DriveType=3"
$defragInfo = $vols | %{$_.DefragAnalysis() | add-member -membertype noteproperty vname $_.name -passThru}
$name2 = $defragInfo | %{$_.DefragRecommended} 
$name3 = $name + ';' + $name2
$defragInfo | %{$_.DefragAnalysis | add-member -membertype noteproperty DefragRecommended $_.DefragRecommended -passThru 
Читать далее

Как с помощью powershell посмотреть event log gpo журнал выполнение групповых политик на разных пк.

Задача выяснить сколько выполняются групповые политики на разных пк в сети.  Applications and Services Logs –> Microsoft -> Windows -> Applications and Services Logs -> Group Policy -> Operational.

$S = Get-Content C:\tmp2.txt
ForEach ($Server in $S) {

get-WinEvent -LogName "Microsoft-Windows-GroupPolicy/Operational" -ComputerName $Server | Select-Object TimeCreated,Message,Id, @{name='ComputerName'; expression={$Server}} | Where-Object {$_.ID -like ‘500*’} |  Format-Table -AutoSize

}

c:\temp2 список пк с новой строки.

Для анализа времени применения политик будут полезны следующие EventID:

  • События 4016 и 5016 показывают время начала и завышения процесса обработки расширений применения GPO, причем в последнем указано общую длительность обработки расширения.Включен фильтр журнала Group Policy ->
Читать далее

Как сбросить зависшую сессию с rdp терминала. rds

# Сброс зависших сессий, добавьте в расписание на своем скрипт сервере
Function RDP_Resetfailure($server){
  $ts = qwinsta /server
  $td = ($ts | where { ($_ -like "*Disc*" -or $_ -like "*Диск*" -or $_ -like "*ЁбЄ*" ) -and $_ -notlike "*services*"})
  $tdselect = $td # Для отладки или внесения в лог: Login Id State
  $td = $td -ireplace ("[^0-9]","") # оставляем только id сессий
  for($i=0; $i -lt $td.Count; $i++){
    Write-Host Reset RDP Failture session ID: $td[$i] $tdselect[$i]      #отладка просмотр id сессий
    rwinsta $td[$i] /server           # сброс зависших сессий, раскомментируйте эту строку
  }
}

$server = "MyRDPServer"
RDP_Resetfailure($server)

 

Как завершить сессию на всех серверах в локальной сети.

Проблема при смене пароля на серверах остались отключенные сессии . Из-за этого блокируется учётная запись. Надо сессию завершить на всех серверах . но так как серверов больше 500 в ручную делать это негуманно к себе.

вот скрипт . Запускается от пользователя которого надо завершить

param (
        #get current logged on username
        [string]$UserName = $env:USERNAME
    )

    # Импортировать модуль Active Directory для Get-ADComputer CmdLet
    Import-Module ActiveDirectory


    # Запрос Active Directory для включенных учетных записей компьютеров серверов Windows и сортировка по имени
    $Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} | Sort Name

    
# Инициирующие переменные
    $SessionList = $NULL
    
Читать далее

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

Задача вывести пользователей из определенной группы , но. Группа имеет в себе пользователей из разных лесов домена.

И по этому команда  Get-ADGroupMember “1c Base ZUP(Zup_TE)” не работает . пишет ошибка :

Get-ADGroupMember : Произошла неопределенная ошибка
строка:1 знак:1
+ Get-ADGroupMember "1c Base ZUP(Zup_TE)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (1c Base ZUP(Zup_TE):ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember



Get-ADGroupMember : The operation completed successfully
At line:1 char:1
+ Get-ADGroupMember -Identity "1c Base ZUP(Zup_TE)" | foreach { Get-ADUser $_ -Pro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (1c Base ZUP(Zup_TE):ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : The operation completed successfully,Microsoft.ActiveDirectory.Management.Commands.GetAD
   GroupMember

Пошел … Читать далее

Как сбросить завсшию службу или когда она в состоянии стоп(stoped)

Проверим какие службы имеют статус stoped.

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

Теперь выполним скрипт. Он выяснит какой процесс блокирует и убьёт его. После этого служба остановится.

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message " Error. Error details: $_.Exception.Message"
}
}
}
else {
Write-Output "No services with 'Stopping'.status"
}

 

Как сделать задание в планировщики для выключения windows 10 по простою (бездействие)

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

В windows 10 почему то стандартный планировщики не работает по условию простоя пк. Тестировал по разному но пк выключается по истечению 5 минут простоя. Написал скрипт на powershell и завернул все в vbs что бы не было видно окна.

Скрипт выключения пк при простои больше 2 часов

#
# This background job automatically locks your Workstation after a specified amount of
# time. It will come in handy if you cannot access the screensaver settings due to policy
# restriction but want to lock your screen after a idle timeout. Or 
Читать далее