标签: vbscript

VBScript - 不知道为什么我的参数没有像变量一样使用

我编写了一个 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)

variables vbscript arguments

3
推荐指数
1
解决办法
3513
查看次数

顺序执行批处理文件

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)

vbscript

3
推荐指数
1
解决办法
7696
查看次数

根据 VBScript 中的正则表达式分割字符串

我想根据正则表达式将字符串拆分为数组,类似于PHP 或 VBScript Split函数中的preg_split可以完成的操作,但使用正则表达式代替分隔符。

使用 VBScript Regexp 对象,我可以执行正则表达式,但它返回匹配项(因此我得到了拆分器的集合......这不是我想要的)

有办法这样做吗?

谢谢

regex vbscript asp-classic

3
推荐指数
1
解决办法
5635
查看次数

此 ASP 代码适合多大的数字?

'   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 语句。

vbscript asp-classic

3
推荐指数
1
解决办法
1673
查看次数

任务计划程序问题 - 无论用户是否登录都无法运行

我有一个批处理文件,它依次调用 VB 脚本。VBScript 的任务包含一个宏,其工作是登录 Oracle 数据库,运行少量查询,在 Excel 表中获取输出,然后执行其他功能。

当使用“仅在用户登录时运行”选项时,脚本在调度程序中运行良好,但在选择“无论用户是否登录时运行”选项时它不会运行。

我尝试了之前帖子中建议的所有选项,但都没有奏效。

vbscript scheduler scheduled-tasks

3
推荐指数
1
解决办法
9094
查看次数

如何解释从 VBscript 传递到 Delphi COM 服务器应用程序的数组

我试图将字节数组从 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 的值为零,为什么会这样?

delphi com vbscript

3
推荐指数
1
解决办法
168
查看次数

测试 VBScript 命名参数是否存在

我想在验证该参数之前测试是否提供了特定的命名参数,以便我可以为缺失和无效条件提供有意义的错误代码。我现在有这个

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)

vbscript command-line-arguments

3
推荐指数
1
解决办法
382
查看次数

如何通过 VBS 将变量从一个 PS 脚本传递到另一个脚本?

我正在处理带有 3 个文件的 GUI 的 PowerShell 脚本:

  • window1.ps1 - 输入变量并开始 start.vbs
  • start.vbs - 开始 window2.ps1
  • window2.ps1 - 显示在 window1 中输入的值

在窗口1,我进入value1textbox1和点击button

图形界面 1

通过单击它,value1应该存储到一个global variable,以便window2可以弹出(通过 VBS)并使用value1.

为代码buttonwindow1

$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为空。

图形界面 2

我错过了什么?我仍在学习 PowerShell,我可能会遗漏一个细节。

注意:我知道我 …

vbscript powershell winforms

3
推荐指数
1
解决办法
133
查看次数

这是如何工作的 - vbs 脚本如何知道它应该打开文件?

我需要一个 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在代码中不再使用了。

脚本如何知道实际应该打开文件?

vbscript

3
推荐指数
1
解决办法
49
查看次数

如何使用 VBS 捕获命令窗口的输出并通过播放的声音通知用户?

我已成功设法使用 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 automation

3
推荐指数
1
解决办法
83
查看次数