我一直在尝试使用此脚本重置所有本地管理员密码,如果服务器列表中只有一台服务器,则脚本运行完全正常,但是,如果有多台服务器,则会抛出错误 -
服务器x"找不到用户名。" 检索成员" SetInfo":"用户n时发生以下异常 无法找到ame。" 在C:\ Users \ v7t7adm \ desktop \ localadmin.ps1:18 char:15 + $ user.SetInfo<<<< () + CategoryInfo:NotSpecified:(:) [],ExtendedTypeSystemExceptio ñ + FullyQualifiedErrorId:CatchFromBaseGetMember
这是我创建的脚本 -
$computers = Get-Content servers.txt
"Name`tStatus" | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv
$user = "KArthur"
$password = "Pol!sh90&8"
foreach($server in $computers)
{
try{
$user = [adsi]"WinNT://$server/$user,user"
$user.SetPassword($password)
"$server`tSuccess"
"$server`tSuccess" | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv -Append
}
catch{
"$server`t" + $_.Exception.Message.ToString().Split(":")[1].Replace("`n","")
"$server`t" + $_.Exception.Message.ToString().Split(":")[1].Replace("`n","") | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv -Append
}
$user.SetInfo()
}
答案 0 :(得分:1)
$user
最初是一个包含用户名的字符串。在循环中,使用ADSI对象覆盖它。然后它会在"WinNT://$server/$user,user"
字符串中再次使用,该字符串失败。
在循环中使用$user
的其他名称,你应该没问题。
编辑:将脚本更改为
$computers = Get-Content servers.txt
"Name`tStatus" | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv
$user = "KArthur"
$password = "Pol!sh90&8"
foreach($server in $computers)
{
try{
$adsiUser = [adsi]"WinNT://$server/$user,user"
$adsiUser.SetPassword($password)
"$server`tSuccess"
"$server`tSuccess" | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv -Append
}
catch{
"$server`t" + $_.Exception.Message.ToString().Split(":")[1].Replace("`n","")
"$server`t" + $_.Exception.Message.ToString().Split(":")[1].Replace("`n","") | Out-File -FilePath C:\users\v7t7adm\desktop\results.csv -Append
}
$adsiUser.SetInfo()
}