Показаны сообщения с ярлыком power shell. Показать все сообщения
Показаны сообщения с ярлыком power shell. Показать все сообщения

2016-10-25

Очистка временных папок во всех профилях терминального сервера

Не обязательно терминального и вообще сервера, но скрипт набросал именно для этой задачи. Не самый оптимальный вариант, но решение вышло вполне себе рабочим и надежным.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Get-ChildItem -Path 'C:\Documents and Settings'   -Force `
    | foreach { $profilePath = $_.Fullname
                $path = $profilePath + "\\Local Settings\\Temp\\"
                Get-ChildItem -Path $path -Force | foreach {$_.FullName
                                                            Remove-Item $_.FullName -Recurse -Force 
                                                            }
                $path = $profilePath + "\\Local Settings\\Temporary Internet Files\\"
                Get-ChildItem -Path $path -Force | foreach {$_.FullName
                                                            Remove-Item $_.FullName -Recurse -Force 
                                                            }                                            
               }
              

2016-08-03

Поиск живых компьютеров в Active Directory

Скрипт для поиска компов, которые меняли свой внутренний пароль в AD в течение последних трех дней:

1
2
3
4
5
6
7
8
9
Import-Module ActiveDirectory

$lastCheckDays = 3

$filter =  (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy")
get-adcomputer `
            -filter "Passwordlastset -gt '$filter'" `
            -properties * `
            | Select name,passwordlastset,OperatingSystem

Выполнять лучше на контроллере соответствующего домена

Если требуется собрать и свести в один файл информацию о комьютерах из разных доменов, можно использовать такой скрипт
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Import-Module ActiveDirectory

$tempfile   = 'c:\temp\comp.csv.temp'
$resultfile = 'c:\temp\comp.csv'
 

function DoDomain($dc)
    {
    $lastCheckDays = 30 # Максимум дней с обновления пароля
    $filter =  (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy")

    $error.clear()
    try {Get-ADDomain -server "$dc" | Out-Null } # проверка доступности контроллера
    catch {"[Error] $dc" }
    if (!$error){ # если контроллер доступен - понеслась...
        # Вытаскиваем список живых компов, 
        # экспортируем во временный файл, вырезая заголовки
        get-adcomputer `
                    -filter "Passwordlastset -gt '$filter'" `
                    -server "$dc"`
                    -properties name,CanonicalName,passwordlastset,OperatingSystem `
                    | Select name,CanonicalName,passwordlastset,OperatingSystem  `
                    | ConvertTo-Csv -NoTypeInformation `
                    | Select-Object -Skip 1 `
                    | Out-File "$tempfile" 

        #импортируем временный файл с другими заголовками, 
        $tmp = Import-Csv -Header Name,Domain,Date,OS $tempfile

        # из поля с указанием домена и OU компьютера вырезаем все кроме домена
        # для удобства фильтрации по домену например в экселе
        $tmp | ForEach-Object {$_.Domain = [regex]::replace($_.Domain,'/.*','') }

        # выбираем добавлять ли заголовок во временный файл. 
        # Добавляем, если результирующий файл еще не был создан и, следовательно
        # это первый обработанный домен. Записываем временный файл
        if (Test-Path "$resultfile") {
            $tmp | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File "$tempfile" 
            } else {
            $tmp | ConvertTo-Csv -NoTypeInformation |  Out-File "$tempfile" 
            }

        # Добавляем временный файл в конец результирующего
        [System.IO.File]::ReadAllText("$tempfile") | Out-File "$resultfile" -Append 
        
        # пробегаемся по результирующему файлу, удаляя пустые строки 
        # (опять же важно для экселя, чтобы первую строку сделать фильром)
        [System.IO.File]::ReadAllText("$resultfile")  -replace '\s+\r\n+', "`r`n" |  Out-File "$resultfile"
        Remove-Item "$tempfile"
        }
    }




Remove-Item "$resultfile" 

DoDomain("dc.domain1.local")
DoDomain("dc.domain2.local")
DoDomain("dc.domain3.local")

Важно! На контроллерах доменов должна работать служба Active Directory Web Services.
Для контроллеров на Windows 2003, если данная служба не установлена, потребуется установить NET Framework 3.5 SP1, а также патч на фреймворк KB969166 (у микрософта доступен только через общение с саппортом так что выкладываю архив), ну и саму службу

2016-04-07

Как убить лишние копии процесса в windows

Потребовалось сотворить костыль, убивающий незавершающиеся копии процесса, на всякий случай оставив последние из запущенных. В моем случае это костыль, но в целом кому-то может и пригодиться, так что выкладываю рецепт на powershell:

$processName = "php-cgi"
$survivorsCount = 6

$processList = Get-Process -Name $processName
$doomedCount = $processList.Count

if ($doomedCount  -gt $survivorsCount) {
  $bulletCount = $doomedCount - $survivorsCount
  $bulletCount
  $killkillkill = $processList | Select-Object -first $bulletCount | Stop-Process -force
}
Сгенерировано: hilite.me

2015-11-26

Конвертирование объектов PowerShell 2 в JSON

В инете распространены скрипты для PowerShell 2, использующие фреймворк. Однако этот способ у меня не заработал  - выдавал ошибки типа "Invalid JSON primitive: Microsoft.Exchange.Management.SystemConfigurationTasks.DatabaseCopyStatusEntry."

Для таких страдальцев как я, нашелся отличный работающий скрипт конвертации: https://gist.github.com/mdnmdn/6936714

Скачать архивом (актуальность на момент поста): ConvertTo-JSON.zip

2015-07-17

Как убить процесс по имени в винде

С помощью powershell - легко и просто:

Get-Process -Name имя_процесса | Stop-Process -force

имя_процесса - может содержать маску,
-force - предотвращает появление диалога с подтверждением

2013-02-11

SharePoint 2010: как удалить пул приложений

Для удаления пула приложений в SharePoint 2010 необходимо:

  1. Зайти на сервер администрирования Sharepoint и запустить SharePoint 2010 Management Shell с правами администратора
    (Start -> All Programs -> Microsoft SharePoint 2010 Products -> Правый клик на SharePoint 2010 Management Shell -> Run as administrator)
  2. Выполнить:
    1. Get-SPServiceApplicationPool
      (выведет список созданных пулов)
    2. Remove-SPServiceApplicationPool
      1. Enter the Identity - > Имя пула
      2. Нажмите Y для подтверждения удаления пула
Готово.