整个域中的本地管理员密码更改

时间:2017-02-21 16:27:32

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0 powershell-remoting

我一直在尝试使用此脚本重置所有本地管理员密码,如果服务器列表中只有一台服务器,则脚本运行完全正常,但是,如果有多台服务器,则会抛出错误 -

服务器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()

}

1 个答案:

答案 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()
}