Description

Creates a specified local user or group on computers that are not running PowerShell version 5.1 to utilize the New-LocalUser or New-LocalGroup cmdlets.

If the object type value that is specified is a 'User' then you will need to input a password.

This can only process one user or group at this time, but I will modify the script to where it can create multiple users and groups.

For more information, please refer to the function's help.

 

Code

PowerShell
Edit|Remove
Function Create-LocalUserGroupObject  
{  
    <#  
        .SYNOPSIS  
             
           Creates a specified local user or group on computers that are not running PowerShell version 5.1 to utilize the New-LocalUser or New-LocalGroup cmdlets.  
  
  
        .PARAMETER LocalObjectType  
  
            A parameter that allows you to select whether the object that is to be created will be a user or a group.  
  
              
            Validation Attributes Used:  
  
  
            [ValidateSet()]  
            ===============  
  
            Ensures that either a value of 'User' or 'Group' are specifed.  
  
          
        .PARAMETER LocalObjectName  
  
            A parameter that allows you to specify the name of either a user or a group object type.   
              
              
            Validation Attributes Used:  
              
              
            [ValidateLength()]  
            ==================  
              
            Ensures the name is not less than 5 characters and no greather than 20 characters.  
              
              
            [ValidatePattern()]  
            ===================  
              
            Ensures the name that is specified contains only alphanumerica characters.  
  
          
        .EXAMPLE  
             
           Create a local test group with the name of 'TestGroup' and a description of 'Used to contain test users for testing purposes'  
  
           Create-LocalUserGroupObject -ComputerName 'TestComputer' -LocalObjectType Group -LocalObjectName 'TestGroup' -LocalObjectDescription 'Used to contain test users for testing purposes'  
  
          
        .EXAMPLE  
             
           Create a local test user with the name of 'TestUser' and a description of 'Used for testing purposes'  
  
           Create-LocalUserGroupObject -ComputerName 'TestComputer' -LocalObjectType User -LocalObjectName 'TestUser' -LocalObjectDescription 'Used for testing purposes'  
  
  
        .NOTES  
              
            If PowerShell version 5.1 or higher is installed, then use the New-LocalUser or New-LocalGroup cmdlet instead.   
  
            Author: Ron Ratzlaff  
            Alias: The SavvyTech  
            Blog: http://savvyprosolutionsllc.com/blog  
            Organization: SavvyPro Solutions LLC  
            Date: 5/29/2019  
            Version: 1.0  
            File Name: Create-LocalUserGroupObject.ps1  
    #>  
      
    [CmdletBinding()]  
    Param  
    (  
        [string[]]  
        $ComputerName = $env:COMPUTERNAME,  
  
        [Parameter(Mandatory=$true)]  
        [ValidateSet("Group","User")]  
        [string]  
        $LocalObjectType,  
  
        [Parameter(Mandatory=$true)]  
        [ValidateLength(5,20)]  
        [ValidatePattern('^[a-zA-Z0-9]')]  
        [string]  
        $LocalObjectName,  
  
        [Parameter(Mandatory=$true)]  
        [string]  
        $LocalObjectDescription   
    )  
  
    Begin  
    {  
        $NewLine = "`r`n"  
          
        If ($PSVersionTable.PSVersion -ge '5.1')  
        {  
            Do  
            {  
                $NewLine 
                Write-Warning -Message 'PowerShell version 5.1 or greater is installed. Please use the New-LocalUser or New-LocalGroup cmdlet that is native with this version instead'  
                $NewLine  
              
                $Ignore = Read-Host -Prompt 'Would you like to ignore this warning message and keep going (Y or y = Yes, N or n = No)?'  
  
                Switch ($Ignore)  
                {  
                    {$_ -match "[N]"}  
                    {  
                        $NewLine  
                        Write-Warning -Message 'You selected No, script will now exit.'  
                        $NewLine  
                      
                        Pause  
  
                        Exit  
                    }  
  
                    {$_ -match "[Y]"}  
                    {  
                        $NewLine  
                        Write-Warning -Message 'You selected Yes, script will proceed.'  
                        $NewLine  
                         
                        Pause  
                    }  
  
                    {$_ -notmatch "[YN]"}  
                    {  
                        $NewLine  
                        Write-Warning -Message 'You did not make a proper selection.'  
                        $NewLine  
                      
                        Pause  
                    }  
                }  
            }  
  
            While ($Ignore -notmatch "[YN]")  
        }  
  
        If ($LocalObjectType -eq 'User')   
        {  
            $LocalUserPassword = Read-Host -Prompt "Enter a password for user '$($LocalObjectName)' account" -AsSecureString  
            $BasicString = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($LocalUserPassword)  
            $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BasicString)   
        }  
    }  
  
    Process  
    {  
        Foreach($Computer in $ComputerName)   
        {  
           $NewLine 
           Write-Output -Verbose "Working on $Computer"  
         
           If (Test-Connection -ComputerName $Computer -Count 1 -Quiet)   
           {  
                Try   
                {  
                    $CompObject = [ADSI]"WinNT://$Computer"  
                    $NewLocalObject = $CompObject.Create($LocalObjectType,$LocalObjectName)  
              
                    If ($LocalObjectType -eq "User")   
                    {  
                        $NewLocalObject.SetPassword($PlainPassword)  
                    }  
              
                    $NewLocalObject.SetInfo()  
                    $NewLocalObject.Description = $LocalObjectDescription  
                    $NewLocalObject.SetInfo()  
              
                    $NewLine 
                    Write-Output -Verbose "The object type of '$LocalObjectType' with the name '$LocalObjectName' created successfully!" 
                }   
          
                Catch   
                {  
                    $NewLine 
                    Write-Warning -Message "The following error occurred while creating the $($LocalObjectType) '$($LocalObjectName)': $_" 
                }  
           }   
     
           Else   
           {  
                $NewLine 
                Write-Warning -Message "$Computer is offline!"  
           }  
        }  
    }  
  
    End {}  
}