【问题标题】:How to create a local windows user account using remote powershell?如何使用远程PowerShell创建本地Windows用户帐户?
【发布时间】:2014-12-22 13:10:35
【问题描述】:

尝试使用 powershel 创建用户。这对本地机器效果很好。但是如何使用远程 powershell 在远程机器上创建本地用户帐户?

脚本localwindows.ps1是

$comp = [adsi]'WinNT://machinename,computer';
$user = $comp.Create('User', 'account4');
$user.SetPassword('change,password.10');
$user.SetInfo();

我通过 C# 尝试了同样的事情:

            PSCredential credential = new PSCredential(userName, securePassword);
            WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machinename", 5985, "/wsman", shellUri, credential);
            using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
            {

                runspace.Open();
                 String file = "C:\\localwindows.ps1";
                 Pipeline pipeline = runspace.CreatePipeline();
                 pipeline.Commands.AddScript(System.IO.File.ReadAllText(file));                    
                 pipeline.Commands.Add("Out-String");

                 // execute the script 
                 Collection<PSObject> results = pipeline.Invoke();
              }  

这在本地也可以正常工作。但是对于远程计算机,它会抛出异常“创建:访问被拒绝”。

【问题讨论】:

标签: windows powershell powershell-remoting


【解决方案1】:

我能够使用以下命令在远程计算机中创建本地用户帐户:

Invoke-Command -ComputerName machineName -filepath c:\script.ps1 -credential  $getcredential

脚本是

$comp = [adsi]'WinNT://localhost,computer';
$user = $comp.Create('User', 'account11');
$user.SetPassword('change,password.10');
$user.SetInfo();
$user

【讨论】:

    【解决方案2】:

    使用ADSI WinNT provider

    $username = "foo"
    $password = "bar"
    $computer = "hostname"
    
    $prov = [adsi]"WinNT://$computer"
    $user = $prov.Create("User", $username)
    $user.SetPassword($password)
    $user.SetInfo()
    

    【讨论】:

    • 我使用上述方法连接到 localhost。但是在尝试在远程机器中创建它时,它抛出异常:'使用“0”参数调用“setinfo”的异常:“访问被拒绝。” 在第 1 行 char:12 + $HD.setinfo
    • 确保您的帐户已获得远程访问该主机的授权,远程管理已启用 (winrm qc),并且远程主机上的 Windows 防火墙允许访问。
    • 如何传递在远程主机有权限的账号的凭证?
    • 尝试New-Object System.DirectoryServices.DirectoryEntry("WinNT://$computer", $adminuser, $adminpass) 而不是[adsi]"WinNT://$computer"
    【解决方案3】:

    powershell 脚本 invoke-Command 在远程计算机上执行任何 powershell 脚本。您并没有说您如何使用 powershell 创建用户,而是作为示例您编写:

    invoke-command -computername myserver {[ADSI]$server="WinNT://localhost";$HD=$server.Create("User","HD");$HD.SetPassword("H3lpD3>K");$HD.SetInfo()}
    

    您还可以使用 -filepath 参数远程执行本地 powershell 脚本:

    Invoke-Command -ComputerName MyRemoteServer -filepath c:\Scripts\DaScript.ps1
    

    要启用远程命令,您必须在远程计算机上启用 winrm。你可以通过运行来做到这一点

    winrm quickconfig
    

    在远程计算机上。

    【讨论】:

    • 我尝试了以下方式[ADSI]$server="WinNT://localhost" $HelpDesk=$server.Create("User","HelpDesk") $HelpDesk.SetPassword("H3lpD3 >K") $HelpDesk.SetInfo()
    • 我尝试了以下方式: [ADSI]$server="WinNT://localhost" $HelpDesk=$server.Create("User","HelpDesk") $HelpDesk.SetPassword(" H3lpD3>K") $HelpDesk.SetInfo() 但是在给出以下内容时我收到错误: [ADSI]$server="WinNT://$servername" $HD=$server.Create("User","HD" ) $HD.SetPassword("H3lpD3>K") $HD.SetInfo()
    • 我收到错误:'使用“0”参数调用“setinfo”的异常:“访问被拒绝。”在行:1 char:12 + $HD.setinfo
    • 我已经用你的代码更新了我的答案,并测试它在我的网络上工作正常。看起来您有一些访问问题。确保以管理员身份运行 Powershell 窗口,并且已在远程服务器上运行 winrm quickconfig。
    • Localhost 对我来说很好用。我以管理员身份启动了 powershell。我也在远程机器上运行了'winrm quickconfig'。但我收到错误“异常调用”SetInfo”,参数为“0”:“未指定错误”在行:1 char:12 + $HD.SetInfo
    【解决方案4】:

    如果您有一个 PowerShell 脚本来在服务器上本地创建本地用户帐户,那么只需使用 PSExec 在具有管理帐户的远程计算机上运行它

    【讨论】:

    • 我尝试使用以下命令在远程计算机上执行 sript - C:\localwindows.ps1 PSexec.exe \\%comp% -c -f -u Domain\username %ScriptPath% 但我我仍然收到错误异常调用带有“0”参数的“SetInfo”:“访问被拒绝。”在 C:\localwindows.ps1:4 char:14 + $user.SetInfo
    • 好的,我上班时会看看这个。同时,尝试检查远程机器上的 Windows 日志,看看是否有任何记录。还要确认使用的域帐户是否既是域管理员组的成员又是目标计算机上的本地管理员组的成员
    • 我使用的帐户是域上的用户(本地管理员角色)。我尝试使用 Computer\Adminisrator 在远程计算机上创建帐户,但这也引发了异常:“访问被拒绝。”
    • 好的,我忘了在这里提到,当您尝试运行 psexec 时,以管理员身份打开命令提示符并在两台机器上禁用 UAC。 UAC 有时可能会很痛苦......您可以为此创建一个聊天,这样这篇文章就不会太长。还有你在什么操作系统上尝试这个
    • 我尝试在另一台 windows 7 机器上从 windows 7 机器创建本地帐户。本地计算机中的用户在远程 Windows 7 计算机中没有管理角色。我尝试创建一个从 windows 7 到 windows 2008 r2 的本地用户帐户,它运行良好,因为 windows 7 中的用户在远程计算机上具有特权。
    【解决方案5】:

    Invoke-Command 有效,但您也可以使用 Enter-PSSession -Computer 在远程计算机上本地提交命令。 以下将提示用户输入用户名并将其添加到本地管理员组,无需密码:

    $user = read-host 'What is the name of the local user you would like to add?'
    net user /add $user
    net localgroup Administrators /add $user
    

    【讨论】:

      【解决方案6】:

      我不知道这个问题是否仍然相关,但我已经尝试过了,发现了需要解决的问题。创建目录条目对象时,使用以下代码

      $objOu = New-Object System.DirectoryServices.DirectoryEntry("WinNT://$computer", $admin, $adminPass, "Secure")
      

      其余的都一样。

      【讨论】:

        猜你喜欢
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多