【问题标题】:Creating Local User on Remote Windows Server and Add to Administrator Group在远程 Windows 服务器上创建本地用户并添加到管理员组
【发布时间】:2017-09-02 18:19:39
【问题描述】:

我已创建 PowerShell 脚本以在远程 Windows Server 上创建用户并添加到管理员组:

$Computer = Read-Host "Computer name:"
$UserName = Read-Host "User name:"
$Password = Read-Host "Password" -AsSecureString
$AdminGroup = [ADSI]"WinNT://$Computer/Administrator,group"
$User = [ADSI]"WinNT://$Computer/$UserName,user"
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, (ConvertTo-SecureString $Password -AsPlainText –Force)
$User.SetPassword($Cred.GetNetworkCredential().Password)
$AdminGroup.Add($User.Path)

它给了我以下错误:

检索成员“SetPassword”时发生以下异常:“ 找不到用户名。 在 C:\test1.ps1:7 char:18 + $User.SetPassword

【问题讨论】:

    标签: powershell wmi powershell-remoting get-wmiobject


    【解决方案1】:

    如果你想创建一个用户,你需要实际创建一个用户。您使用的语句仅在用户帐户已经存在时才返回它:

    $User = [ADSI]"WinNT://$Computer/$UserName,user"
    

    创建本地帐户的最简单方法可能是net 命令:

    & net user $UserName ($Cred.GetNetworkCredential().Password) /expires:never /add
    

    使用WinNT provider 是可能的,但更复杂:

    $acct = [adsi]"WinNT://$Computer"
    $user = $acct.Create('User', $UserName)
    $user.SetPassword($Cred.GetNetworkCredential().Password)
    $user.SetInfo()
    

    另外,正如其他人已经指出的那样,您拼错了管理员组的名称(这就是导致第二个错误的原因)。由于该组的名称可以本地化,具体取决于您运行的语言版本,您可能仍需要解决它:

    $AdminGroupName = Get-WmiObject Win32_Group -Filter "LocalAccount=True AND SID='S-1-5-32-544'" |
                      Select-Object -Expand Name
    $AdminGroup = [adsi]"WinNT://$Computer/$AdminGroupName,group"
    

    【讨论】:

    • @Ansgar Wiechers - 非常感谢用户添加远程工作,但是尽管进行了上述设置,但它并没有添加到管理员组中。
    【解决方案2】:

    您实际上从未创建过用户。您还想更正管理员组名称。我已经修复了你的代码:

    $Computer = Read-Host "Computer name:"
    $UserName = Read-Host "User name:"
    $Password = Read-Host "Password" -AsSecureString
    $AdminGroup = [ADSI]"WinNT://$Computer/Administrators,group"
    $CompObject = [ADSI]"WinNT://$Computer"
    $User = $CompObject.Create('User',$UserName)
    $Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, (ConvertTo-SecureString $Password -AsPlainText –Force)
    $User.SetPassword($Cred.GetNetworkCredential().Password)
    $User.SetInfo()
    $AdminGroup.Add($User.Path)
    

    【讨论】:

      【解决方案3】:

      我认为您在下面的“管理员”中缺少一个“s”。

      $AdminGroup = [ADSI]"WinNT://$Computer/Administrator,group"
      

      我有一个(工作的)脚本将用户添加到本地管理员组,该行如下所示:

      $AdminGroup = [ADSI]"WinNT://$ComputerName/Administrators,group"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多