Jay*_*ari 2 powershell wmi powershell-remoting get-wmiobject
我创建了 PowerShell 脚本来在远程 Windows Server 上创建用户并添加到管理员组:
\n\n$Computer = Read-Host "Computer name:"\n$UserName = Read-Host "User name:"\n$Password = Read-Host "Password" -AsSecureString\n$AdminGroup = [ADSI]"WinNT://$Computer/Administrator,group"\n$User = [ADSI]"WinNT://$Computer/$UserName,user"\n$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, (ConvertTo-SecureString $Password -AsPlainText \xe2\x80\x93Force)\n$User.SetPassword($Cred.GetNetworkCredential().Password)\n$AdminGroup.Add($User.Path)\nRun Code Online (Sandbox Code Playgroud)\n\n它给了我以下错误:
\n\n\n检索成员“SetPassword”时发生以下异常:“\n找不到用户名。\n在 C:\\test1.ps1:7 char:18\n+ $User.SetPassword <<<< ($Cred. GetNetworkCredential().Password)\n + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException\n + ExcellentQualifiedErrorId : CatchFromBaseGetMember\n\n检索成员“Add”时发生以下异常:“指定的\n本地组不存在。 \n在 C:\\test1.ps1:8 字符:16\n+ $AdminGroup.Add <<<< ($User.Path)\n + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException\n + ExcellentQualifiedErrorId : CatchFromBaseGetMember \n\n
如果你想创建一个用户,你需要实际创建一个用户。您使用的语句仅在用户帐户已存在时才返回该帐户:
Run Code Online (Sandbox Code Playgroud)$User = [ADSI]"WinNT://$Computer/$UserName,user"
创建本地帐户最简单的方法可能是net命令:
& net user $UserName ($Cred.GetNetworkCredential().Password) /expires:never /add
Run Code Online (Sandbox Code Playgroud)
使用WinNT提供者是可能的,但更复杂:
$acct = [adsi]"WinNT://$Computer"
$user = $acct.Create('User', $UserName)
$user.SetPassword($Cred.GetNetworkCredential().Password)
$user.SetInfo()
Run Code Online (Sandbox Code Playgroud)
另外,正如其他人已经指出的那样,您拼错了管理员组的名称(这就是导致第二个错误的原因)。由于该组的名称可以本地化,具体取决于您运行的语言版本,因此您可能无论如何都想解决它:
$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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5053 次 |
| 最近记录: |