Can't find Microsoft.Powershell.LocalAccounts module (or run Get-LocalUser)

42,544

Solution 1

This cmdlet was made available with Server 2016 and Win10 1607+. On earlier OS's, you will either need to use net.exe, WMI, ADSI, or a module that uses one of those methods or install WMF 5.1.

Edit: The MS PFE Sean Kearney written made a module called localaccount. Which is built from the code of this GitHub repostiory which replicates the functionality of the new modules via ADSI. Which works with older versions of PowerShell. Note that this is not the same as the builtin in module.

Solution 2

Beginning with Windows 10 including Server 2016 and 2019, the Windows Management Framework (which includes the local account management Powershell module) is now shipped "in-box". See https://docs.microsoft.com/en-us/powershell/wmf/overview#wmf-availability-across-windows-operating-systems for information about WMF for other versions of Windows.

This means that functions like Get-LocalUser and New-LocalUser are available without having to install or import any modules.

Note that parameter names have changed for many of these functions from WMF 5.1. Additionally, the password must now be supplied as a secure string which may be generated using the ConvertTo-SecureString function.

Here's an example to check for an existing user and create the user if they don't exit:

$UserName = "AdaLovelace"
$SecurePassword = ConvertTo-SecureString "ThisIsAPassword!" –asplaintext –force
if (Get-LocalUser($UserName))
{
    Echo "User exists"
}
else
{
    New-LocalUser $UserName -Password $SecurePassword -UserMayNotChangePassword -AccountNeverExpires
}

Solution 3

Microsoft.Powershell.LocalAccounts module comes as part of the Windows Management Framework (WMF) v5.1 that can be downloaded from : https://www.microsoft.com/en-us/download/details.aspx?id=54616

Once installed you'll be able to use those cmdlets in your script. Here you have also a reference of which modules are included with each version of Powershell: https://msdn.microsoft.com/powershell/reference/readme

Good luck! :)

Share:
42,544
Scott Baker
Author by

Scott Baker

Updated on May 24, 2020

Comments

  • Scott Baker
    Scott Baker almost 4 years

    When running a script, I have a line to verify that a "service account" (aka a local user account) for our app exists:

    $svcAccountName = "TheAccountName"
    $svcAccount = Get-LocalUser -Name $svcAccountName
    

    The server (Windows Server 2008 R2) is balking at the Get-LocalUser cmdlet, stating:

    Get-LocalUser : The term 'Get-LocalUser' is not recognized as the name of a
    cmdlet, function, script file, or operable program. Check the spelling of the
    name, or if a path was included, verify that the path is correct and try again.
    At line:1 char:1
    + Get-LocalUser 
    + ~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (Get-LocalUser:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException
    

    So I tried to import the LocalAccounts module:

    Import-Module Microsoft.Powershell.LocalAccounts
    

    and I got this:

    Import-Module : The specified module 'LocalAccounts' was not loaded because no
    valid module file was found in any module directory.
    At line:1 char:1
    + Import-Module
    + ~~~~~~~~~~~~~
        + CategoryInfo          : ResourceUnavailable: (LocalAccounts:String)[Import-Module], FileNotFoundException
        + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand
    

    The server is running PSVersion 4.0 according to the $PSVersionTable variable.

    Why isn't the LocalAccounts module loaded and the Get-LocalUser command running? How can I fix this?

  • Scott Baker
    Scott Baker almost 7 years
    Thanks - but why is it missing?
  • Zach Olinske
    Zach Olinske almost 7 years
    Added more info, but it works on Windows 8.1 and Server 2012.
  • Jelphy
    Jelphy almost 6 years
    The first paragraph is not correct. I am using Windows Server 2012 R2 and PS 5.1 - Get-LocalUser is working.
  • bluuf
    bluuf almost 6 years
    @Jelphy : a module written by a 3rd party isn't the same as an official module (even when it mimics the functions of the original one)
  • BenH
    BenH almost 6 years
    @bluuf I don think Jelphy is referring to Sean Kearney's module. Installing WMF 5.1 does install the official Microsoft.PowerShell.LocalAccounts module on down level OS's. I tested on both 2012 R2 and Win7.
  • Tim
    Tim over 4 years
    For anyone coming to this thread late, its important to note that the in-box version only loads from a 64 bit powershell session.
  • BentChainRing
    BentChainRing almost 4 years
    @Tim So helpful! Until reading your note I could not figure out why a script containing a call to Get-LocalUser cmdlet would successfully execute in one account but not in another account. The user in the 'other' account was using a shortcut to 32-bit PS.