У меня есть сценарий PowerShell, который, когда я его запускаю, создает локальный amdmistrator на выбранных мной компьютерах и дает мне еще один текстовый файл, в котором они были созданы.
Но из txt, где собирает хост, выбирает только последнюю строку, и я не знаю почему.
Спасибо за помощь
cls
$username = "username"
$password = "password"
$computernames = get-content "C:\serverlist.txt"
foreach ($computername in $computernames) {
get-adcomputer $computername | select DistinguishedName > C:\serverlist2.txt
}
$users = $null
$computer = [ADSI]"WinNT://$computername"
Try {
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username already exists"
} Else {
$user_obj = $computer.Create("user", "$username")
$user_obj.SetPassword($password)
$user_obj.SetInfo()
$user_obj.Put("description", "$username")
$user_obj.SetInfo()
$user_obj.psbase.invokeset("AccountDisabled", "False")
$user_obj.SetInfo()
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username has been created on $($computer.name)"
$group = [ADSI]("WinNT://"+$computername+"/administradores,group")
$group.add("WinNT://"+$computername+"/"+$username+",user")
} Else {
Write-Host "$username has not been created on $($computer.name)"
}
}
} Catch {
Write-Host "Error creating $username on $($computer.path): $($Error[0].Exception.Message)"
}
Ваша ошибка возникла из-за того, что цикл foreach был закрыт до того, как вы обработали основное действие:
$computernames = get-content "C:\serverlist.txt"
foreach ($computername in $computernames) {
get-adcomputer $computername | select DistinguishedName > C:\serverlist2.txt
} # <-- This is the error
И когда сценарий продолжит выполнение, прочтите только последнее значение $ computername .
Вы измените сценарий следующим образом:
cls
$username = "username"
$password = "password"
$computernames = get-content "C:\serverlist.txt"
foreach ($computername in $computernames) {
get-adcomputer $computername | select DistinguishedName > C:\serverlist2.txt
$users = $null
$computer = [ADSI]"WinNT://$computername"
Try {
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username already exists"
} else {
$user_obj = $computer.Create("user", "$username")
$user_obj.SetPassword($password)
$user_obj.SetInfo()
$user_obj.Put("description", "$username")
$user_obj.SetInfo()
$user_obj.psbase.invokeset("AccountDisabled", "False")
$user_obj.SetInfo()
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username has been created on $($computer.name)"
$group = [ADSI]("WinNT://"+$computername+"/administradores,group")
$group.add("WinNT://"+$computername+"/"+$username+",user")
} else {
Write-Host "$username has not been created on $($computer.name)"
}
}
} Catch {
Write-Host "Error creating $username on $($computer.path): $($Error[0].Exception.Message)"
}
}
И исправите некоторые ошибки с отступом.