Home > database >  Automate user homedirectory creation Powershell
Automate user homedirectory creation Powershell

Time:04-20

I'm automating the process of creating LocalUsers on Windows systems. So far I used the Microsoft docs on New-LocalUser which has worked fine to create the account, this is my code so far:

function New-AdminUser {
    param(
        [Parameter(Position=0)]
        [string] $UNameLocal,
        [Parameter(Position=1)]
        [string] $UDescription,
        [Parameter(Position=2)]
        [System.Security.SecureString] $Password
    )

    New-LocalUser -Name $UNameLocal -Description $UDescription -Password $Password -AccountNeverExpires -Confirm
    Add-LocalGroupMember -Group "Administrators" -Member $UNameLocal
}

But this command does not actually generate the homedirectory in C:\Users\username. I can create this by manually logging into the created user, but I want to automate this in Powershell. I couldn't find anything in the LocalAccounts module.

Is there any way to automate local account setup in Windows 10 using Powershell, without having to manually log in to a new account?

CodePudding user response:

If you start a process (cmd /c) as the created user, it will create his profile. Add this to your function:

$Cred = New-Object System.Management.Automation.PSCredential ("$UNameLocal", $Password)

Start-Process "cmd.exe" -Credential $Cred -ArgumentList "/C" -LoadUserProfile

CodePudding user response:

Here is the code:

param([Parameter(Mandatory=$true)][String]$samAccountName)

$fullPath = "\\srv2012r2\Users\{0}" -f $samAccountName
$driveLetter = "Z:"

$User = Get-ADUser -Identity $samAccountName

if($User -ne $Null) {
    Set-ADUser $User -HomeDrive $driveLetter -HomeDirectory $fullPath -ea Stop
    $homeShare = New-Item -path $fullPath -ItemType Directory -force -ea Stop

    $acl = Get-Acl $homeShare

    $FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"
    $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
    $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $PropagationFlags = [System.Security.AccessControl.PropagationFlags]"InheritOnly"

    $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
    $acl.AddAccessRule($AccessRule)

    Set-Acl -Path $homeShare -AclObject $acl -ea Stop

    Write-Host ("HomeDirectory created at {0}" -f $fullPath)
} 

and here is the reference: https://activedirectoryfaq.com/2017/09/powershell-create-home-directory-grant-permissions/

  • Related