我是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"
非常感谢你的帮助! :)
答案 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