首页 > 解决方案 > 用于映射打印机的 VBS 脚本:没有 .NET 3.5 框架怎么办?

问题描述

我们的打印机由具有(几乎)与打印机相同名称的计算机组分配(例如“prn-accounting”等)。该脚本查找计算机所在的广告打印机组,删除所有网络打印机,并仅分配计算机所在组建议的打印机。

它正在工作,但问题是它需要 .NET 3.5 框架才能运行,因为我猜它使用了 ArrayList。

错误消息:“第 2 行中的 Windows 脚本主机错误 0x80131700”和 .NET 3.5 安装过程开始...

我的问题是:如果没有 .NET 3.5,它如何工作?有没有办法让它改用.NET 4.8?或者使用数组而不是数组列表?但是怎么办?...

Dim WSHShell, objNET, objSysInfo, objUser, strUserDN, strGroups, Group, GroupName, DruckerListe, i
Set DruckerListe = CreateObject("System.Collections.ArrayList")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set objNET = WScript.CreateObject("WScript.Network")
Set objSysInfo = WScript.CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objComputer = GetObject("LDAP://" & strComputerDN)
strGroups = objComputer.GetEx("memberOf")

For Each gruppe in strGroups
Set ThisGroup = GetObject("LDAP://" & gruppe)
GroupName = ThisGroup.CN
If Left(GroupName,3) = "prn" Or Left(GroupName,3) = "mfc" Or Left(GroupName,3) = "cop" Or Right(GroupName,7) = "armband" Or Left(GroupName,3) = "pdf" Then
DruckerListe.add "\\srv-print01\" & GroupName
End If
Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set networkPrinters = objWMIService.ExecQuery("Select * From Win32_Printer Where Network = TRUE")
For Each networkPrinter in networkPrinters 
    networkPrinter.Delete_
Next

Dim objNetwork
Set objNetwork = CreateObject("WScript.Network")
For Each drucker in DruckerListe
    If Right(drucker, 10) = "-nodefault" Then
        objNetwork.AddWindowsPrinterConnection Left(drucker,Len(drucker)-10)
    ElseIF Left(drucker, 7) = "armband" Then
        objNetwork.AddWindowsPrinterConnection drucker
    Else
        objNetwork.AddWindowsPrinterConnection drucker
        objNetwork.SetDefaultPrinter drucker
    End If
Next 
Set objNetwork = Nothing

标签: vb.netvbscript

解决方案


问题是 .Net 3.5 中定义的ArrayList对象

Set DruckerListe = CreateObject("System.Collections.ArrayList")

如果将ArrayList替换为常规数组或其他类型的集合,则不需要 .Net 3.5(除非其他类之一也在 .Net 3.5 中定义)


推荐阅读