Пакетный импорт PowerShell User CSV и создание домашней папки - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь использовать импорт CSV для создания пакетных пользователей, но для этого также для создания домашней папки пользователей и папок профиля, но с одновременными настройками разрешений.

Я нашел много полезной информации в Интернете, я просто не знаю, как заставить синтаксис работать с тем, что у меня уже есть, и мне потребовалось довольно много времени, чтобы даже добраться до него.

Это мой сценарий для создания учетных записей на контроллере домена и последующей их синхронизации с O365. Мы используем CSV, поскольку мы создаем множество пользователей одновременно:

Import-Csv "C:\blablabla\filename.csv" | ForEach-Object { 
New-ADUser -Name $_.Name `
 -GivenName $_."GivenName" `
 -Surname $_."Surname" `
 -DisplayName $_."DisplayName" `
 -SamAccountName  $_."samAccountName" `
 -UserPrincipalName  $_."UserPrincipalName" `
 -Path $_."Path" `
 -AccountPassword (ConvertTo-SecureString “Pa$$w0rd” -AsPlainText -force) -Enabled $true `
 -EmailAddress $_."EmailAddress" `
 -ProfilePath $_."ProfilePath" `
 -HomeDrive $_."HomeDrive" `
 -HomeDirectory $_."HomeDirectory" `
 -ScriptPath $_."ScriptPath" `
 -Server $_."Server" `
 -OtherAttributes @{ProxyAddresses= $_."ProxyAddresses"} `
}
Start-ADSyncSyncCycle -PolicyType Initial

Все значения указывают на столбцы в файле Excel, которые заполняются автоматически на основе имени и фамилии пользователя.

Я знаю, что я должен создавать домашнюю папку и папки профиля и устанавливать разрешения, как показано ниже, например, я просто не знаю, как заставить синтаксис работать с тем, что у меня уже есть?

Пока значения только правильно устанавливаются в AD, но папки не создаются и разрешения не применяются.

Полагаю, я мог бы просто добавить другую команду для создания новой папки, но я не знаю, как это сделать, добавить ее в команду foreach?

New-Item -ItemType Directory -Path \\dc\userdata
$ACL = (Get-ACL -Path $HomeDirectory)
$FullControlAccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule([System.Security.Principal.NTAccount]"hcc.local\$UserName","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))
$ACL.AddAccessRule($FullControlAccessRule)
Set-ACL -Path $HomeDirectory $ACL

Любая помощь будет принята с благодарностью.

Спасибо.

Итак, согласно тому, что сказал NAS, что-то вроде этого тогда

?

 -OtherAttributes @{ProxyAddresses= $_."ProxyAddresses"}
 New-Item -ItemType Directory -Path $_.HomeDirectory           
 New-Item -ItemType Directory -Path $_.ProfilePath             
 $ACL = (Get-ACL -Path $_.HomeDirectory)                       
 $FullControlAccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule(
                                [System.Security.Principal.NTAccount]"hcc.local\$($_.samAccountName)",        
                                "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))
    $ACL.AddAccessRule($FullControlAccessRule)
    Set-ACL -Path $_.HomeDirectory $ACL
 $ACL = (Get-ACL -Path $_.ProfilePath)                       
 $FullControlAccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule(
                                [System.Security.Principal.NTAccount]"hcc.local\$($_.samAccountName)",        
                                "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))
    $ACL.AddAccessRule($FullControlAccessRule)
    Set-ACL -Path $_.ProfilePath $ACL

1 Ответ

0 голосов
/ 29 октября 2018
Import-Csv "C:\blablabla\filename.csv" | ForEach-Object { 
    New-ADUser -Name $_.Name `
     ...
     -OtherAttributes @{ProxyAddresses= $_."ProxyAddresses"}      # Remove backtick
    New-Item -ItemType Directory -Path $_.HomeDirectory           # create home path if needed
    New-Item -ItemType Directory -Path $_.ProfilePath             # create profile path if needed
    $ACL = (Get-ACL -Path $_.HomeDirectory)                       # No need for quotes around properties if they do not contain spaces or other special characters
    $FullControlAccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule(
                                [System.Security.Principal.NTAccount]"hcc.local\$($_.samAccountName)",        # replace $UserName with correct variable
                                "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))
    $ACL.AddAccessRule($FullControlAccessRule)
    Set-ACL -Path $_.HomeDirectory $ACL
    # ->                                                                     # repeat for profile path if needed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...