【发布时间】:2016-08-28 21:54:51
【问题描述】:
我正在尝试编写 VBScript,它将检查我们的文件共享上的打开文件,如果找到,则关闭与该文件的会话。问题是对象的会话 ID 有时会返回负数,因此它并不总是有效。当使用 Net File 将其与实际会话 ID 进行比较时,它是完全不同的。下面是代码。
If LCase(Right(Wscript.FullName, 11)) = "wscript.exe" Then
strPath = Wscript.ScriptFullName
strCommand = "%comspec% /k cscript """ & strPath & """"
Set objShell = CreateObject("Wscript.Shell")
objShell.Run(strCommand), 1, True
Wscript.Quit
End If
intFound = 0
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("WScript.Shell")
strDomain = objNetwork.UserDomain
strServerName = "myServerName"
strFileToClose = "Some Open File.PDF"
Set objConnection = GetObject("WinNT://" & strDomain & "/" & strServerName & "/LanmanServer")
Set objOpenFiles = objConnection.Resources
WScript.Echo "Files open on " & strServerName & VbCrLf & "=============================="
strIDs = ""
For Each objFile In objOpenFiles
On Error Resume Next
temp = objFile.User
If Err.Number = 0 Then
On Error GoTo 0
If InStr(LCase(objFile.Path), LCase(strFileToClose)) > 0 Then
WScript.Echo objFile.Name & " || " & objFile.Path & " || " & objFile.User
If strIDs = "" Then
strIDs = objFile.Name
Else
strIDs = strIDs & ";" & objFile.Name
End If
intFound = intFound + 1
End If
Else
Err.Clear
On Error GoTo 0
End If
Next
WScript.Echo ""
If intFound > 0 Then
arrIDs = Split(strIDs, ";")
For Each strFileID In arrIDs
strCommand = "cmd /c Net File " & strFileID & " /close"
objShell.Run strCommand, 0, True
WScript.Echo strFileID & " has been closed."
Next
Else
WScript.Echo "No matching open files were found."
End If
这是一个输出示例,其中包含来自脚本的负会话 ID,然后是来自 Net File 的实际结果。请记住,它们有时匹配,有时不匹配!
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
Files open on myServerName
==============================
-2013150206 || C:\\Users\user\Desktop\Some Open File.PDF || user
-2013150206 has been closed. 'Not true since it is a negative number
C:\Users\admin\Desktop>net file 2281817090 'Actual Session ID
File ID 2281817090
User name user
Locks 0
Path C:\\Users\user\Desktop\Some Open File.PDF
Permissions R
The command completed successfully.
C:\Users\admin\Desktop>
我认为正在发生的事情是变体的数据类型正在发生变化,如果数字足够大,它将被存储为负值......我认为您不能将其更改为无符号整数,并且假设我什至知道发生了什么,这可能是完全错误的。
【问题讨论】:
标签: vbscript