我编写了一个 VBScript 来枚举特定日期的事件日志中的事件。
第一个查询从今天日期和昨天日期之间的 NT 事件日志事件中选择,
Set colEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where TimeWritten >= '" _
& dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'")
Run Code Online (Sandbox Code Playgroud)
然后,从上面的查询中,我想从日志文件中提取事件 ID。
For Each objEvent in colEvents
If objEvent.Eventcode = EventNu And (objEvent.LogFile = EventLog) Then
Run Code Online (Sandbox Code Playgroud)
我已将以下内容放入脚本中并且它可以工作,但是我想通过命令行使用参数(即 EventLogCheck.vbs EventNumber LogFile ),但是如果我使用脚本的参数部分,则不会返回任何项目。这让我抓狂。下面的完整脚本使用变量,我已注释掉参数部分,但您可以取消注释并使用它。我究竟做错了什么?谢谢你的帮助!
Const CONVERT_TO_LOCAL_TIME = True
Dim EventLog
EventNu = 18
EventLog = "System"
'Input from the command line
'If Wscript.Arguments.Count <= 1 Then
' Wscript.Echo "Usage: EventLogCheck.vbs EventNumber …Run Code Online (Sandbox Code Playgroud) dim shell,x,y
x="D:\d"
y="c.bat " & x
set shell=createobject("wscript.shell")
shell.run y
shell.run "a.bat"
set shell=nothing
Run Code Online (Sandbox Code Playgroud)
当我运行此脚本时,它同时运行两个批处理文件。我需要的是它运行第一个批处理文件(c.bat),并且在完全执行后,它应该执行另一个批处理文件(a.bat)。
如果我制作另一个批处理文件并使用,我需要的工作正常:
call c.bat
call a.bat
Run Code Online (Sandbox Code Playgroud) 我想根据正则表达式将字符串拆分为数组,类似于PHP 或 VBScript Split函数中的preg_split可以完成的操作,但使用正则表达式代替分隔符。
使用 VBScript Regexp 对象,我可以执行正则表达式,但它返回匹配项(因此我得到了拆分器的集合......这不是我想要的)
有办法这样做吗?
谢谢
' Now get a Location_ID
'
Set RS = DB.Execute (AF.SQL("GenerateLocationID"))
Location_ID = CInt (RS(0).Value)
RS.Close
Run Code Online (Sandbox Code Playgroud)
正在将其写入使用 Number(10) 定义的 Oracle 数据库,但返回以下错误:
Microsoft VBScript 运行时错误“800a0006”
溢出:'CInt'
我很怀疑,因为现在Oracle表中的最大值是32767。这是创建ID的代码中的限制吗?
(AF.SQL("GenerateLocationID") 是“Select Location_ID.NextVal from Dual”,因此它只是一个标准的 Oracle select 语句。
我有一个批处理文件,它依次调用 VB 脚本。VBScript 的任务包含一个宏,其工作是登录 Oracle 数据库,运行少量查询,在 Excel 表中获取输出,然后执行其他功能。
当使用“仅在用户登录时运行”选项时,脚本在调度程序中运行良好,但在选择“无论用户是否登录时运行”选项时它不会运行。
我尝试了之前帖子中建议的所有选项,但都没有奏效。
我试图将字节数组从 VBscript 传递到我的 Windows Delphi 应用程序,但似乎找不到正确的语法来解释传递的数据。
要求相当简单,如下面的 VBscript 片段所示
Dim inst,arr(5)
Sub Main
set inst=instruments.Find("EP1")
arr(0) = 0
arr(1) = 1
arr(2) = 2
arr(3) = 3
arr(4) = 4
inst.writebytes arr,5
end Sub
Run Code Online (Sandbox Code Playgroud)
我可以让服务器接受脚本传递的 olevariant 但数据似乎是乱码,我的示例服务器代码如下所示,并且基于此处的 Stackoverflow 问题如何在 Delphi 中使用变体数组
procedure TInstrument.WriteBytes(Data: OleVariant; Length: Integer);
var i,n:integer; Pdat:Pbyte; Adata:PvarArray;
begin
if VarIsArray(data) then
begin
n:=TVarData(Data).VArray^.Bounds[0].ElementCount;
Adata:= VarArrayLock(Data);
Getmem(Pdat,length);
try
for i:=0 to length-1 do
Pdat[i]:=integerArray(Adata.data^)[i];
Finstrument.WriteBytes(Pdat,Length);
finally
freemem(Pdat)
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以这个想法是接受脚本传递的整数,将其转换为本地数据表示(字节数组),然后将其传递给我的函数以使用数据。
我尝试了几种不同的数据类型和方法,试图从变体中获取一些无乱码的数据,但都无济于事。
从传递的变体中提取数组数据的正确方法是什么?
另外, TVarData(Data).VArray^.Bounds[0].ElementCount 的值为零,为什么会这样?
我想在验证该参数之前测试是否提供了特定的命名参数,以便我可以为缺失和无效条件提供有意义的错误代码。我现在有这个
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = WScript.Arguments.Named
If colArgs.Item("Script") Then
If not objFSO.FileExists(colArgs.Item("Script")) Then
intReturn = 1805
End If
Else
intReturn = 1639
End If
If Not intReturn Then
msgBox colArgs.Item("Script"), 0, "Script"
Else
msgBox intReturn, 0, "Error"
End If
Run Code Online (Sandbox Code Playgroud)
我的期望是,如果我根本不提供名为 Script 的参数,我会得到值为 1639 的 Error msgBox 。相反,我得到了很好的 msgBox,脚本为空白。我也试过
If Not colArgs.Item("Script") = "" Then
Run Code Online (Sandbox Code Playgroud)
编辑:根据@Tomalak,我现在有了这个
Option Explicit
Dim objShell, objFSO, colArgs, intReturn
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colArgs = …Run Code Online (Sandbox Code Playgroud) 我正在处理带有 3 个文件的 GUI 的 PowerShell 脚本:
window1.ps1 - 输入变量并开始 start.vbsstart.vbs - 开始 window2.ps1window2.ps1 - 显示在 window1 中输入的值在窗口1,我进入value1到textbox1和点击button。
通过单击它,value1应该存储到一个global variable,以便window2可以弹出(通过 VBS)并使用value1.
为代码button在window1:
$button_OnClick=
{
$global:value1 = $textBox1.Text
start-process .\start.vbs
}
Run Code Online (Sandbox Code Playgroud)
开始.vbs:
Set objShell = CreateObject("Wscript.Shell")
objShell.run("powershell.exe -nologo -file .\window2.ps1"), 0, True
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。据我了解,value1是一个全局变量,可以在window2.ps1.
window2一个只有一个文本的空窗口也是如此value1。
$label1.Text = "$value1"
Run Code Online (Sandbox Code Playgroud)
但是由于某种原因,该变量为空且window2为空。
我错过了什么?我仍在学习 PowerShell,我可能会遗漏一个细节。
注意:我知道我 …
我需要一个 vbs 脚本来打开一个.xlsm文件,在其中运行一个宏并再次关闭该文件。
我在网上找到了一个完美运行的脚本。问题是,我不明白怎么做。
这是脚本:
Sub MacroExcel()
Dim ExcelApp
Dim ExcelFile
Set ExcelApp = CreateObject("Excel.Application")
Set ExcelFile = ExcelApp.Workbooks.Open("D:\File1.xlsm")
ExcelApp.Visible = True
ExcelApp.Run "Macro1"
ExcelApp.Quit
Set ExcelFile = Nothing
Set ExcelApp = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
这首先如何打开文件?据我了解,这一行:
Set ExcelFile = ExcelApp.Workbooks.Open("D:\File1.xlsm")
Run Code Online (Sandbox Code Playgroud)
为变量分配一个方法ExcelFile。但是,ExcelFile在代码中不再使用了。
脚本如何知道实际应该打开文件?
我已成功设法使用 VBS 打开cmd以将数据写入数据库并按Enter两次键。
这是我的代码:
Set wshshell = wscript.CreateObject("WScript.Shell")
Wshshell.run "cmd"
wscript.sleep 100
wshshell.sendkeys "firebase-import --service_account C:\Users --database_url https://firebaseio.com --json C:\Users\Zed\testing.json"
wscript.sleep 100
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{ENTER}"
Run Code Online (Sandbox Code Playgroud)
这是控制台输出:
firebase-import --service_account C:\Users\Zed\private-firebase-adminsdk-private --path /Jobs/Test --database_url https://private.firebaseio.com --json C:\Users\Zed\testing.json
All data at https://private.firebaseio.com/Jobs/Test will be overwritten.
Press <enter> to proceed, Ctrl-C to abort.
Reading C:\Users\Zed\testing.json... (may take a minute)
Preparing JSON for import... (may take a minute)
Importing [==================================================] 100% (1/1)
Import completed.
Run Code Online (Sandbox Code Playgroud)
我还设法使用 VBS 播放声音。这是代码:
Dim oPlayer
Set …Run Code Online (Sandbox Code Playgroud) vbscript ×10
asp-classic ×2
arguments ×1
automation ×1
com ×1
delphi ×1
powershell ×1
regex ×1
scheduler ×1
variables ×1
winforms ×1