0

我一直在尝试使用此脚本来重置所有本地管理员密码,如果服务器列表中只有一个服务器,脚本运行得非常好,但是,如果有多个服务器,它会抛出错误为 -整个域的本地管理员密码更改

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

} 
+2

这是一个非常糟糕的主意硬编码在脚本中明文密码。 (将它发布到互联网上也是不好的。) –

回答

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() 
} 
+0

它没有工作,我在循环中声明了$ user和$ password,并且它工作正常。 –