none
Скрипт на добавление ПК из csv-файла в Log on to (-LogonWorkstations) RRS feed

  • Вопрос

  • Добрый день.

    Есть следующий скрипт, который берет список ПК из csv-файла и добавляет их в Logon to у выбранного пользователя:

    Import-Module ActiveDirectory 
    $complist = Import-Csv -Path "C:\Usr_ad\us.csv" | ForEach-Object {$_.NetBIOSName} 
    foreach($comp in $complist){ 
    $comparray += ","+$comp 

    Set-ADUser -Identity qwe -LogonWorkstations $comparray

    Проблема в следующем - в первый раз скрипт отрабатывает нормально, список ПК добавляется в Logon to. После того, как мы очищаем Logon to у пользователя, запускаем заново скрипт. Идем в Logon to и видим, что добавилось ровно в 2 раза больше ПК, чем есть в списке, то есть произошло дублирование.

    csv-файл делаю в Libre Office, может быть в этом загвоздка? Какие параметры должны быть у "корректного" csv-файла? Или же дело в скрипте?


    26 декабря 2013 г. 9:28

Ответы

  • Если скрипт запускать в одной и той же сессии, то в переменной $comparray будет дублирование.

    Поэтому, лучше заменить: 

    foreach($comp in $complist){ 
    $comparray += ","+$comp 

    на

    $comparray = $complist -join ","

    • Помечено в качестве ответа Dmitry Losyankov 26 декабря 2013 г. 10:33
    26 декабря 2013 г. 9:52
    Отвечающий
  • можно оставить практически так как есть только необходимо очищать переменные

    Import-Module ActiveDirectory 
    $complist = Import-Csv -Path "C:\Usr_ad\us.csv" | ForEach-Object {$_.NetBIOSName} 
    foreach($comp in $complist){ 
    $comparray += ","+$comp 

    Set-ADUser -Identity qwe -LogonWorkstations $comparray

    Clear-Variable Comparray

    так как эта переменная у вас не перезатирается а дописывается + 1 переменную можно вообще упразнить что вам при больших списках не будет выжирать память

    То есть:

    Import-Module ActiveDirectory 

    Import-Csv -Path "C:\Usr_ad\us.csv" | ForEach {

    $comp = $_.NetBIOSName

    $comparray += ","+$comp 

    Set-ADUser -Identity qwe -LogonWorkstations $comparray

    Clear-Variable Comparray


    26 декабря 2013 г. 10:02
    Модератор

Все ответы

  • Если скрипт запускать в одной и той же сессии, то в переменной $comparray будет дублирование.

    Поэтому, лучше заменить: 

    foreach($comp in $complist){ 
    $comparray += ","+$comp 

    на

    $comparray = $complist -join ","

    • Помечено в качестве ответа Dmitry Losyankov 26 декабря 2013 г. 10:33
    26 декабря 2013 г. 9:52
    Отвечающий
  • можно оставить практически так как есть только необходимо очищать переменные

    Import-Module ActiveDirectory 
    $complist = Import-Csv -Path "C:\Usr_ad\us.csv" | ForEach-Object {$_.NetBIOSName} 
    foreach($comp in $complist){ 
    $comparray += ","+$comp 

    Set-ADUser -Identity qwe -LogonWorkstations $comparray

    Clear-Variable Comparray

    так как эта переменная у вас не перезатирается а дописывается + 1 переменную можно вообще упразнить что вам при больших списках не будет выжирать память

    То есть:

    Import-Module ActiveDirectory 

    Import-Csv -Path "C:\Usr_ad\us.csv" | ForEach {

    $comp = $_.NetBIOSName

    $comparray += ","+$comp 

    Set-ADUser -Identity qwe -LogonWorkstations $comparray

    Clear-Variable Comparray


    26 декабря 2013 г. 10:02
    Модератор
  • Спасибо огромное за советы!
    26 декабря 2013 г. 10:33
  • Доброе время суток.

    У меня возникла похожая ситуация. Задача заключается в том, что бы выгрузить список компьютеров из нескольких OU в файл, затем добавить компьютеры из этого файла группе пользователей в LogonWorkstations. Попробовал ваш скрипт на одном пользователе, скрипт почему-то проставляет доступ на все компьютеры в Log on to.
  • Доброе время суток.

    У меня возникла похожая ситуация. Задача заключается в том, что бы выгрузить список компьютеров из нескольких OU в файл, затем добавить компьютеры из этого файла группе пользователей в LogonWorkstations. Попробовал ваш скрипт на одном пользователе, скрипт почему-то проставляет доступ на все компьютеры в Log on to.

    теме 5 лет.

    если у вас похожая проблема - создайте новую тему со ссылкой на эту и своим кодом. Судя по описанной проблеме ваш вопрос решается правкой одного-двух неправильных параметров


    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • Благодарю, создал новую тему.