我需要调整以下脚本以将Bitlocker状态提供给文本文件,该文件应具有其文件名的计算机名称。因此,对于名为Station10的PC,脚本将输出名为Station10_enabled.txt
的文本文件。或者,如果禁用Bitlocker,它将创建一个名为Station10_disabled.txt
的文件。
我有下面的代码,这似乎有道理,但是没有用。
代码产生错误“Can not use parentheses when calling a sub
”,我该如何解决?
我也担心一旦代码运行,%computername%变量将无效或创建语法错误,但由于上述问题我无法测试。
如果有人知道如何优雅地处理我想要做的事情,请帮助。
strComputer = "."
Set objShell = CreateObject("Wscript.Shell")
strEnvSysDrive = objShell.ExpandEnvironmentStrings("%SystemDrive%")
Set objWMIServiceBit = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2 \Security\MicrosoftVolumeEncryption")
Set colItems = objWMIServiceBit.ExecQuery("SELECT * FROM Win32_EncryptableVolume",,48)
For Each objItem in colItems
If objItem.DriveLetter = strEnvSysDrive Then
strDeviceC = objItem.DeviceID
DriveC = "Win32_EncryptableVolume.DeviceID='"&strDeviceC&"'"
Set objOutParams = objWMIServiceBit.ExecMethod(DriveC, "GetProtectionStatus")
If objOutParams.ProtectionStatus = "1" Then
My.Computer.FileSystem.WriteAllText("C:\cos\.txt","Bitlocker is enabled.",True)
Else
My.Computer.FileSystem.WriteAllText("C:\cos\test.txt","Bitlocker is disabled.",True)
End if
End If
Next
答案 0 :(得分:0)
VB对圆括号有点挑剔:
如果使用函数结果,则必须指定Function
调用的参数列表。
不得指定Sub
个电话的参数列表。如果不使用函数结果,则对于函数调用的参数列表也是如此。
陷阱是,如果你调用一个只需要一个参数的子(或函数,并且不使用它的结果),你通常会离开,并在圆括号中指定该参数。 < strong>您可能认为,既然这样可行,您可以(或必须)指定圆括号。这是不真实的,因为在这种情况下,圆括号可以(并且被)作为表达式的一部分,该表达式被计算以传递要作为实际paarmeter传递的值。这就是写
的原因My.Computer.FileSystem.WriteAllText("C:\cos\test.txt","Bitlocker is disabled.",True)
在语法上无效,而
AnyRoutineThatAcceptsOneArgument (Value)
没问题,但与
完全相同AnyRoutineThatAcceptsOneArgument Value
如果你不明白,请考虑
AnyRoutineThatAcceptsOneArgument ((((((((Value))))))))
这是合法的,但充满了无用(冗余)括号。
因此,只需要围绕常规参数的圆括号的两个上下文是:
与此相反,对于不使用函数结果的Sub调用或函数调用,不允许指定括号。 事实上,在一个特殊情况下,即只有一个参数的例程调用,您可以根据需要指定尽可能多的圆括号。它只是一个表达式,并且你可以根据需要使用尽可能多的(多余的)包围。