整个域的本地管理员密码更改
问题描述:
我一直在尝试使用此脚本来重置所有本地管理员密码,如果服务器列表中只有一个服务器,脚本运行得非常好,但是,如果有多个服务器,它会抛出错误为 -整个域的本地管理员密码更改
服务器x“无法找到用户名。” 检索成员“SetInfo”时发生以下异常:“无法找到用户n ame”。 在C:\用户\ v7t7adm \桌面\ localadmin.ps1:18字符: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()
}
答
$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()
}
+0
它没有工作,我在循环中声明了$ user和$ password,并且它工作正常。 –
这是一个非常糟糕的主意硬编码在脚本中明文密码。 (将它发布到互联网上也是不好的。) –