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

Простенький скрипт, точнее две его разновидности, для случая, когда необходимо создать папки для ряда пользователей на файловом сервере при условии, что названия папок будут совпадать с именами пользователей и эти пользователи будут иметь определенный уровень доступа к этим (своим) папкам. Все это может создаваться внутри определенной папки непосредственно на сервере или через сеть в общей папке по UNC пути.

Первый пример использует дополнительный модуль ActiveDirectory и предназначен для случая, когда пользователи находятся в каком-либо OU в AD:

#
# PowerShell Script.
# Creates home folders for users from an OU in AD and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# We need the AD module for this first
Import-Module ActiveDirectory

# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Path to an OU with users.
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Muhosransk,DC=domain,DC=com"
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $User = $User.Name
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    }

Второй пример обрабатывает список пользователей, находящийся в текстовом файле:

#
# PowerShell Script.
# Creates home folders for a list of users and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Path to a text file with users.
$Users = Get-Content "$home\users.txt"
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    }

В данных примерах устанавливаются не полные права, а «Modify, Synchronize» не дающие возможности пользователям менять security permissions и становиться владельцами папок. Конечно все это можно поменять на FullControl или что-либо другое. Также в примерах установлено наследование разрешений подпапками и файлами.

UPDATE:

Третий пример, для случая, когда папки создаются для членов АД группы и прописываются им как домашние директории:

#
# PowerShell Script.
# Creates home folders for a list of users and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# We need the AD module for this first
Import-Module ActiveDirectory

# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Extract group members.
$Users = Get-ADGroupMember -Identity "Groupname" -Recursive
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    Set-ADUser -Identity $User -HomeDrive "Z:" -HomeDirectory "$Dir$User"
    }

Взято здесь

Создание файла профиля в PowerShell

Давайте для начала разберемся с понятием файла профиля.

Файл профиля это файл со своим именем и маршрутом доступа или я их называю шаблонами. Когда Вы запускаете PowerShell, она считывает все файлы профилей и загружает их код в память. На протяжении сеанса можно обращаться к нашему коду, т.е. можно на создавать заранее функций и обращаться к ним сразу после запуска PowerShell.

Если Вы работаете с PowerShell первый раз, то для начала надо посмотреть политику выполнения, для это необходимо набрать команду
Get-ExecutionPolicy
Если функция нам возвратит Restricted, то необходимо выполнить команду
Set-ExecutionPolicy RemoteSigned

Для создания файла профиля воспользуемся командой
New-Item -type file $PROFILE -force
После создания файла давайте его откроем
Notepad $profile
Теперь давайте возьмем для примера вот что:
$today = Get-Date -displayHint date
#получим день недели
function events ($log="system")
{
Get-EventLog $log -newest 10
}
#получим 10 последних событий
#функция возвращает нам 10 последних событий из журнала, если не перелать параметр с именем, то будет использоваться журнал System

Теперь сохраним содержимое файла и перезапустим консоль PowerShell

Для проверки наберем в консоли:
$today
events "windows powershell" #здесь мы передаем параметр имени журнала

Если есть у Вас крутые функции, то прошу в комментарии

Удаление устаревших файлов на Windows PowerShell

Для рекурсивного удаления устаревших(старше 30 дней) файлов можно использовать следующее
Get-ChildItem d:\server\Shared -recurse | where {$_.LastWriteTime -le (Get-Date).AddDays(-30)} | remove-item -force -Recurse | out-null
А есть ли у Вас полезные скрипты?