VBS脚本解析csv,获取数据并移动AD对象

时间:2012-03-12 09:54:20

标签: parsing csv vbscript

我是vbs的新手,我希望你能对这个剧本提供一些帮助。

基本上我需要一个脚本来获取我当前的计算机名,查看csv文件以获取新的相关计算机名,然后使用该新名称将AD中的相应帐户移动到新的OU。

我已经知道如何获取当前的计算机名称以及如何将对象移动到新OU,这些是我已经完成的事情,但我真的没有信心解析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 :(得分:0)

您可以使用ADO读取CSV(和其他分隔的)文件。血腥细节在this article中讨论。使用VBScript读取简单CSV文件的示例代码如下:

注意: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

答案 1 :(得分:0)

好的,由于您的修改,脚本现在完美运行! :)

但是我又遇到了一个麻烦,当这个文件有名字时,我似乎无法打开FROM子句中的csv文件。

赞:CONTOSO-US-ComputerList.csv我在FROM子句中收到语法错误

但是当我使用没有破折号的文件名时没有问题。

我知道这是一个细节,但我别无选择,只能在名称中加上破折号:/

再次感谢您的帮助:)非常感谢!!

编辑:

没关系我找到了解决方案,感谢scriptingguys

请求现在看起来像这样:

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