【发布时间】:2014-05-23 13:15:29
【问题描述】:
这里可能是一个独特的问题。我有一堆服务器需要添加新的本地用户帐户。
我以为我已经通过以下命令找到了答案:
# Create new local Admin user for script purposes
$date = Get-Date -Format yyyy-MM-dd
$servers = get-content serverlist.txt
$username = read-host -Prompt "Enter Username"
$securepass = read-host -Prompt "Enter Password" -AsSecureString
foreach ($server in $servers)
{
Invoke-command -ComputerName $server
{
$Computer = [ADSI]"WinNT://localhost"
$LocalAdmin = $Computer.Create("User", "$username")
$LocalAdmin.SetPassword("$securepass")
$LocalAdmin.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD
$LocalAdmin.SetInfo()
}
}
但是,当我运行此代码时,会出现一些不同的错误。看来问题出在代码的“$Computer.Create("User"," 部分。
我实际上已经将它与一个简单的基本本地帐户创建脚本配对,并且这个版本可以工作:
invoke-command -computername <server> {[ADSI]$server="WinNT://localhost";$HD=$server.Create("User","TESTUSER");$HD.SetPassword("PASSWORD");$HD.SetInfo()}
现在该版本可以正常工作,因为它能够设置用户并使用引用的文本创建密码。所以我继续设置带有提示的变量,为我们提供一种自动化新用户创建过程的方法。
所以我转向了这个更自动化的版本:
$date = Get-Date -Format yyyy-MM-dd
$username = read-host -Prompt "Enter Username"
$securepass = read-host -Prompt "Enter Password"
$server1 = "SERVER"
Invoke-command -computername $server1 {
[ADSI]$server=("WinNT://localhost/")
$HD=$server.Create("User",$username)
$HD.SetPassword($securepass)
$HD.SetInfo()
}
但这不起作用并产生以下问题:
检索成员“Create”时发生以下异常:“未知错误 (0x80005000)” + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException + FullyQualifiedErrorId : CatchFromBaseGetMember + PSComputerName : SERVER
您不能在空值表达式上调用方法。 + CategoryInfo : InvalidOperation: (SetPassword:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull + PSComputerName : SERVER
您不能在空值表达式上调用方法。 + CategoryInfo : InvalidOperation: (SetInfo:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull + PSComputerName : SERVER
我实际上不确定这里出了什么问题。create 方法似乎在 MULTIPLE 其他脚本中被接受,但是对于这个我将变量放入 create 方法的那一刻,它爆炸了。
有人知道怎么回事吗?我变得可笑的沮丧。
【问题讨论】:
标签: powershell-3.0