VBS скрипт для анализа csv, получения данных и перемещения объекта AD - PullRequest
0 голосов
/ 12 марта 2012

Я новичок в VBS, и мне нужна ваша помощь по этому сценарию.

В основном мне нужен скрипт, который получит мое текущее имя компьютера, заглянет в csv-файл, чтобы получить новое связанное имя компьютера, а затем использует это новое имя для перемещения соответствующей учетной записи в AD в новое подразделение.

Я уже знаю, как получить мое текущее имя компьютера и как переместить объект в новое подразделение, это то, что я уже сделал, но я действительно не уверен в синтаксическом анализе csv в поисках нового имени компьютера на основе моего текущего один.

Новое имя - это значение сразу после текущего имени в CSV-файле. Разлучен только комой.

Редактировать 1

Я попробовал ваше решение, но, как указано в комментариях, я думаю, что есть вещи, которые я не понимаю Я мог бы неправильно использовать набор записей или не знать, как получить информацию из него. Вот мой полный сценарий, чтобы вы могли видеть, что я делаю:

'Get the old/current computername
Set wshShell = WScript.CreateObject( "WScript.Shell" )
OldComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

'Parse the xml file to get the related new computername

Dim CONNECTION : Set CONNECTION = CreateObject("ADODB.CONNECTION")
Dim RECORDSET : Set RECORDSET = CreateObject("ADODB.RECORDSET")
CONNECTION.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\;Extended Properties=""text;HDR=YES;FMT=Delimited"""
RECORDSET.Open "SELECT NewComputerName FROM ComputerList.csv WHERE ComputerName = '& OldComputerName'", CONNECTION, 3, 3


 'Move the new computername in the target AD to a new OU
Dim NewComputerName
Dim OldLocation
NewComputerName = RECORDSET
OldLocation = "LDAP://CN=" & NewComputerName & ",OU=Staging,OU=Workstations,DC=contoso,DC=lab"
Set objNewOU = GetObject("LDAP://OU=Migration,OU=Workstations,DC=contoso,DC=lab")
Set objMoveComputer = objNewOU.MoveHere(OldLocation, vbNullString)

' It does not work as it said Error: Wrong number of arguments or invalid property assignment pour la ligne:
' OldLocation = "LDAP://CN=" & NewComputerName & ",OU=Staging,OU=Workstations,DC=contoso,DC=lab"

Большое спасибо за вашу помощь! :)

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Хорошо, теперь скрипт работает отлично благодаря вашим модификациям!:)

Но у меня есть еще одна проблема, кажется, что я не могу открыть файл csv в предложении FROM, когда этот файл имеет - в имени.

Как: CONTOSO-US-ComputerList.csv Я получаю ошибку Синтаксическая ошибка в предложении FROM

Но когда я использую имя файла без тире, проблем не возникает.

Я знаю, что этоподробно, но у меня нет выбора, кроме наличия файла с тире в имени: /

Еще раз спасибо за вашу помощь :) Очень признателен !!

РЕДАКТИРОВАТЬ:

НеважноЯ нашел решение благодаря scriptingguys !

Запрос теперь выглядит так:

strFile = "[CONTOSO-ComputerList.csv]" RECORDSET.Open "SELECT * FROM " & strFile & " WHERE ComputerName = '" & OldComputerName & "'", CONNECTION, 3, 3

0 голосов
/ 12 марта 2012

Вы можете использовать ADO для чтения файлов CSV (и других разделенных). Кровавые подробности обсуждаются в этой статье . Пример кода для чтения простого файла CSV с использованием VBScript:

Примечание: CSV-файлу нужна строка заголовка, чтобы ADO использовал имена столбцов:

ComputerName,NewComputerName
Computer #1,Other Computer #1
Computer #2,Other Computer #2
Computer #3,Other Computer #3

Код VBScript:

option explicit

dim CONNECTION : set CONNECTION = CreateObject("ADODB.CONNECTION")
dim RECORDSET : set RECORDSET = CreateObject("ADODB.RECORDSET")

CONNECTION.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder\Containing\CSV\File\;Extended Properties=""text;HDR=YES;FMT=Delimited"""

RECORDSET.Open "SELECT * FROM data.csv WHERE ComputerName = '" & OldComputerName & "'", CONNECTION, 3, 3

' //// For testing \\\\
WScript.Echo RECORDSET.Source
' \\\\ For testing ////

if RECORDSET.EOF then
    WScript.Echo "Record not found"
    WScript.Quit
else
    dim NewComputerName : NewComputerName = RECORDSET("NewComputerName") & ""
    WScript.Echo NewComputerName
end if

Обратите внимание, что этот код может не работать на 64-битных ОС - не напрямую. Вы должны запустить 32-битную версию CScript / WScript следующим образом:

%windir%\SysWoW64\cscript c:\Path\To\test.vbs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...