Последние записи.

Разрешения по умолчанию на папки OAB

Из разряда – заметки на память.

Разрешения по умолчанию на папку ExchangeOAB (генерация) для Exchange 2007
Путь x:\Program Files\Microsoft\Exchange Server\ExchangeOAB

Заметка: Если папку удалить то процесс OABGen создаст ее заново

На папку устанавливаются следующие разрешения:

  • SYSTEM – Full Control
  • Administrators – Full Control
  • Exchange Servers:
    Traverse Folder
    List Folder
    Read Attributes
    Read Extended Attributes
    Read Permissions
    наследование для контейнера (папки и подпапки)
  • Exchange Servers:
    Read Data
    Read Attributes
    Read Extended Attributes
    Read Permissions
    наследование для контейнера и объектов (папки, подпапки и файлы)

Разрешения по умолчанию на папку OAB (публикация) для Exchange 2007
Путь x:\Program Files\Microsoft\Exchange Server\ClientAccess\OAB
На папку устанавливаются следующие разрешения:

  • SYSTEM – Full Control
    наследование для контейнера и объектов (папки, подпапки и файлы)
  • Administrators – Full Control
    наследование для контейнера и объектов (папки, подпапки и файлы)
  • IIS_IUSR:
    Traverse folder / execute files
    List folder / Read Data
    Read Attributes
    Read Extended Attributes
    Read Permissions
    наследование только для этой папки

Аудит NTFS разрешений

Powershell Logo
При работе с файловыми ресурсами мой самый нелюбимый процесс это документирование существующих разрешений на папки и анализ того что было и что стало.
Иначе выражаясь проведение аудита не тот процесс который мне нравиться и надо каким то образом было упростить это действо.

По старой традиции на помощь приходит powershell.

Кратко о скрипте.

В переменной $folder задается имя анализируемой папки, далее производится анализ всех дочерних папок и результат пишется в файл D:\Reports\FolderReport.csv

# get-FolderPermissions.ps1

$folder = "\\FILESRV-01\ShareName\"
$in = Get-ChildItem $folder | where {$_.extension  -eq ""}
$result = foreach($res in $in) {
  $s = get-acl $res.fullname            
  foreach($inherit in $s.Access) {
    $inherit | add-member -membertype noteproperty -name Path -value $res.fullname -passthru |
    select Path, IsInherited, IdentityReference, filesystemrights  
  }
}
$result | Export-Csv -Encoding "Unicode" -Path "D:\Reports\FolderReport.csv" -Delimiter ","

Несколько расширенный второй вариант скрипта, отличие от первого в том что список папок он берет из файла folders.txt и затем создает csv-отчеты в папке $reportFolder

# get-FoldersPermissions2.ps1

$folders = Get-Content "folders.txt"
$reportFolder = "D:\Reports\"

foreach ($folder in $folders) {
  $source = Get-ChildItem $folder | where {$_.extension  -eq ""}
  $result = foreach($res in $source) {
    $s = Get-Acl $res.fullname            
    foreach($inherit in $s.Access) {
      $inherit | Add-Member -membertype noteproperty -name Path -value $res.fullname -passthru | Select Path, IsInherited, IdentityReference, filesystemrights  
    }
  }
  $logName = $folder.Replace("\", "_")
  $logName = $LogName.Replace(":", "")
  $result | Export-Csv -Encoding "Unicode" -Path "$($reportFolder)report_$logName.csv" -Delimiter ","
}

Надеюсь что предложенный инструмент будет вам полезен.
Комментарии и замечания приветствуются.

Аудит запланированных заданий

Powershell Logo

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

  1. где
  2. что
  3. как отработало

На ручную проверку нет времени и хочется хоть какой то автоматизации процесса.

Давайте посмотрим как можно облегчить поставленную задачу.

Первым шагом создаем файл со списком хостов.

SRV01
SRV02
SRV03
...

Далее, формируем файл get-SheduledTask.ps1 и методом «скопировать-вставить» наполняем его содержимым представленным ниже.

# get-SheduledTask.ps1
Clear-Host
$servers = Get-Content "hostlist.txt"
$srvcount = (get-content "hostlist.txt" | Measure-Object -property length -Line)

write-host "Number of Servers to Check: " $srvcount.Lines
$COUNT = 0

foreach ($server in $servers) {
  write-progress -activity "Check Scheduled tasks." -status "Percent complete: " -percentComplete (($COUNT / $srvcount.Lines) * 100)
  $ping = new-object System.Net.NetworkInformation.Ping
  $Reply = $ping.send($server)
  if ($Reply.status –eq "Success") {
    write-host "Online -" $server
    $COUNT=$COUNT+1
 
    if ($COUNT -eq 1) {
      schtasks /query /FO CSV /V /S $server | Out-File "SchedTaskTemp.csv"
    } else {
      schtasks /query /NH /FO CSV /V /S $server | Out-File -append "SchedTaskTemp.csv"
    }
  } else {
    write-host "Offline -" $server
}
$Reply = ""
}
Import-Csv "SchedTaskTemp.csv" | Where-Object {$_."Last Result" -ne 0} | Format-Table Hostname,TaskName,"Run As User","Last Run Time","Last Result" | Out-File report.txt

Алгоритм работы скрипта простой:

  1. из файла hostlist.txt извлекается список серверов подлежащих проверке.
  2. проверяется доступность сервера
  3. при помощи команды schtasks /query с сервера берется список заданий и помещается в файл SchedTaskTemp.csv

Примечание: Стоит отметить что данный скрипт корректно работает только под Windows XP или под Windows Server 2003 по причине того что Vista и Win7 распознают строку schtasks /query /NH /FO CSV /V /S $server как некорректную. Немного позже постараюсь адаптировать скрипт для всех систем.

Надеюсь что описанный инструмент поможет вам в работе.
Комментарии и замечания приветствуются.

Облако пепла над Петербургом

над городом пепел

Вылез из офиса на улицу, а там довольно милая картинка.

Свершилось.

logo
Многие уже познакомились сначала с релиз-кандидатом от Office 2010 и затем с Бетой.

В блоге команды разработчиков Office 2010 размещена отличная новость.

Для обладателей Volume License с Software Assurance (SA) продукт станет доступен для скачивания 27 апреля. Те кто не имеет SA смогут приобрести продукт у партнеров начиная с первого мая.