如何在VBScript中重命名objItem.Name

如何在VBScript中重命名objItem.Name,vbscript,Vbscript,我正在尝试将本地计算机上的打印机从旧的打印服务器移动到新的打印服务器。如果我保持打印机名称不变,我的代码就会工作。但是,如果我想在尝试重置objItem.Name的值的同时重命名打印机。在下面的代码中,如何在select Case语句中重命名objItem.Name On Error Resume Next Dim strComputer, DefaultPTR Dim objWMIService, colItems, WshNetwork Dim LogFile Dim wshShell

我正在尝试将本地计算机上的打印机从旧的打印服务器移动到新的打印服务器。如果我保持打印机名称不变,我的代码就会工作。但是,如果我想在尝试重置objItem.Name的值的同时重命名打印机。在下面的代码中,如何在select Case语句中重命名objItem.Name

On Error Resume Next

Dim strComputer, DefaultPTR 
Dim objWMIService, colItems, WshNetwork
Dim LogFile
Dim wshShell
CONST ForWriting = 2
CONST ForAppending = 8

Set wshShell = CreateObject( "WScript.Shell" )
Set objFSO = CreateObject("Scripting.FileSystemObject")
UserProf = wshShell.ExpandEnvironmentStrings( "%USERPROFILE%" )
LogFile = UserProf & "\MovePtrsToNewPrintServerName.txt"

If (objfso.FileExists(UserProf & "\MovePtrsToNewPrintServerName.txt")) Then
  'WScript.Echo("File exists!")
  WScript.Quit()
Else
  Set objFile = objFSO.CreateTextFile(LogFile, ForWriting)
End If

strComputer = "."
DefaultPTR=0

Set WshNetwork = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48) 

For Each objItem in colItems

  If UCase(Left(objItem.Name,21)) = "\\OldPrintServerName\" Then
    If objItem.Attributes And 4 Then 
      DefaultPTR = 1
    End If

    objItem.Name.Delete_ 


    Select Case UCase(objItem.Name)

     Case "\\OldPrintServerName\HP4000"
      objItem.Name.Rename "\\OldPrintServerName\HPP3005"    '<--- I know this doesn't work so
                                                            ' how can I rename objItem.Name to
                                                            ' the new printer name?

    End Select

    WshNetwork.AddWindowsPrinterConnection "\\NewPrintServerName\" & Right(objItem.Name,Len
    (objItem.Name) - 9)
    If Not Err.Number = 0 then
      objFile.WriteLine "Problem with " & Right(objItem.Name,Len(objItem.Name) - 21)
      Err.Clear
    End if
    If DefaultPTR = 1 then
      WshNetwork.SetDefaultPrinter "\\NewPrintServerName\" & Right(objItem.Name,Len
      (objItem.Name) - 21)
      DefaultPTR = 0
    End If
  End If

Next 

objFile.WriteLine "Printers have been moved from OldPrintServerName to NewPrintServerName" 
出错时继续下一步
Dim STRC计算机,默认PTR
Dim objWMIService、colItems、WSHNEWORK
Dim日志文件
昏暗的地狱
写入常数=2
出现的常数=8
设置wshShell=CreateObject(“WScript.Shell”)
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
UserProf=wshShell.expandEnvironmentString(“%USERPROFILE%”)
LogFile=UserProf&“\MovePtrsToNewPrintServerName.txt”
如果(objfso.FileExists(UserProf&“\MovePtrsToNewPrintServerName.txt”)),则
'WScript.Echo(“文件存在!”)
WScript.Quit()
其他的
设置objFile=objFSO.CreateTextFile(日志文件,用于写入)
如果结束
strComputer=“”
DefaultPTR=0
设置WshNetwork=CreateObject(“WScript.Network”)
设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\cimv2”)
Set colItems=objWMIService.ExecQuery(“从Win32_打印机中选择*”,48)
对于每个对象,在colitem中
如果UCase(左(objItem.Name,21))=“\\OldPrintServerName\”则
如果是objItem.Attributes和4,则
DefaultPTR=1
如果结束
objItem.Name.Delete\u
选择Case UCase(objItem.Name)
案例“\\OldPrintServerName\HP4000”

objItem.Name.Rename“\\OldPrintServerName\HPP3005”是,可以使用RenamePrinter方法。我已经更新了下面的代码以适应命令

具体而言:

    Select Case UCase(objItem.Name)
     Case "\\OldPrintServerName\HP4000"
      objItem.RenamePrinter("HPP3005")
    End Select
此外,还需要区分打印机名称和共享名称。共享名是用户直接转到打印服务器时在网络浏览器中显示的内容

因此,要配置共享名,而不是打印机名,应该是:

For Each objPrinter in colPrinters
    objPrinter.ShareName = "HPP3005"
    objPrinter.Put_
Next


这里有一篇文章详细介绍了方法->

Win32\u Printer
类有一个函数
objItem.RenamePrinter”“
应该可以做到这一点。不幸的是,这没有帮助。我不仅仅是想给打印机重新命名。我正在尝试将一些文件移动到一个新的打印服务器,同时重命名一些文件。我真的在尝试更改objItem.Name的值,以便代码的其余部分可以工作。你好,Rich,谢谢你的回复。我将不得不阅读脚本编写人员的文章,并试图更好地理解。使用修改后的代码,如果我将wscript.echo objItem.Name放在Select Case语句之后,它仍然显示为\\OldPrintServerName\HP4000而不是\\OldPrintServerName\HPP3005.right,因为我们重命名了打印机存储的文件,所以由于这是一台联网打印机,我已更新了上面的代码以重命名SharedName。请尝试上面更新的代码,并让我知道。你好,里奇,我很抱歉,但我仍然得到相同的结果。同样,如果我将wscript.echo objItem.Name放在End Select之后,它仍然显示为\\OldPrintServerName\HP4000,而不是\\OldPrintServerName\HPP3005。谢谢你的帮助。我知道必须有一种方法来修改objItem的name属性。好吧,查询对象,然后遍历它们,然后设置sharename,然后使用msgbox的对象子方法……当然,它不会显示更新。这些对象不是实时数据源。您应该重新运行程序,看看打印机是否已更改。
On Error Resume Next

Dim strComputer, DefaultPTR 
Dim objWMIService, colItems, WshNetwork
Dim LogFile
Dim wshShell
CONST ForWriting = 2
CONST ForAppending = 8

Set wshShell = CreateObject( "WScript.Shell" )
Set objFSO = CreateObject("Scripting.FileSystemObject")
UserProf = wshShell.ExpandEnvironmentStrings( "%USERPROFILE%" )
LogFile = UserProf & "\MovePtrsToNewPrintServerName.txt"

If (objfso.FileExists(UserProf & "\MovePtrsToNewPrintServerName.txt")) Then
  'WScript.Echo("File exists!")
  WScript.Quit()
Else
  Set objFile = objFSO.CreateTextFile(LogFile, ForWriting)
End If

strComputer = "."
DefaultPTR=0

Set WshNetwork = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48) 

For Each objItem in colItems

  If UCase(Left(objItem.Name,21)) = "\\OldPrintServerName\" Then
    If objItem.Attributes And 4 Then 
      DefaultPTR = 1
    End If

    objItem.Name.Delete_ 


    Select Case UCase(objItem.Name)
     Case "\\OldPrintServerName\HP4000"
      objItem.ShareName = "HPP3005"
      objItem.Put_
    End Select

    WshNetwork.AddWindowsPrinterConnection "\\NewPrintServerName\" & Right(objItem.Name,Len
    (objItem.Name) - 9)
    If Not Err.Number = 0 then
      objFile.WriteLine "Problem with " & Right(objItem.Name,Len(objItem.Name) - 21)
      Err.Clear
    End if
    If DefaultPTR = 1 then
      WshNetwork.SetDefaultPrinter "\\NewPrintServerName\" & Right(objItem.Name,Len
      (objItem.Name) - 21)
      DefaultPTR = 0
    End If
  End If

Next 

objFile.WriteLine "Printers have been moved from OldPrintServerName to NewPrintServerName"