VBS脚本适应另一种语言

时间:2014-07-16 14:41:00

标签: windows vbscript

我的脚本在基于英语的计算机上运行得非常好,但在其他语言中却没有。

该脚本获取计算机Bitlocker的恢复密钥,然后将其备份到Active Directory中。

我发现我需要更新" 数字密码"在我的相应语言中的值,但这不会改变空白变量NumericalKeyID的输出...

Option Explicit
Dim strNumericalKeyID 
Dim strManageBDE,strManageBDE2 
Dim oShell 
Dim StrPath 
Dim StdOut, strCommand 
Dim Result, TPM, strLine 
Dim Flag, NumericalKeyID
Set oShell = CreateObject("WSCript.Shell")
'==================================================================================== 
'This section looks for the Bitlocker Key Numerical ID
strManageBDE = "Manage-BDE.exe -protectors -get c:" 'Bitlocker command to gather the ID
Flag = False
Set Result = oShell.Exec(strManageBDE)'sees the results and places it in Result
Set TPM = Result.StdOut    'Sets the variable TPM to the output if the strManageBDe command
While Not TPM.AtEndOfStream 
   strLine = TPM.ReadLine  'Sets strLine 
   If InStr(strLine, "Numerical Password:") Then  ' This section looks for the Numerical Password 
    Flag = True 
   End If 
   If Flag = True Then 
     If InStr(strLine, "ID:") Then  'This section looks for the ID 
      NumericalKeyID = Trim(strLine)' This section trims the empty spaces from the ID {} line 
      NumericalKeyID = Right(NumericalKeyID, Len(NumericalKeyID)-4) 
      Flag = False 'Stops the other lines from being collected 
     End If 
   End If 
Wend
strManageBDE2 = "Manage-BDE.exe -protectors -adbackup C: -ID " & NumericalKeyID 
oShell.Run strManageBDE2, 0, True 'Runs the Manage-bde command to move the numerical ID to AD.

我确定这很愚蠢,但我的剧本知识很新。

非常感谢你! :)

英文版manage-bde的输出:

enter image description here

2 个答案:

答案 0 :(得分:0)

我讨厌使用正则表达式建议解决方案(Obligatory XKCD link) 我认为这可能是你最好的选择

这样的事情可以解决问题

.*ID:.*{(.*)}.*

为你分解

.* - Match any character ID: - Match ID: .* - Match any character { - match { ( - remember anything between this and the next ) } - match } .* - Match any character

如果您不熟悉VBScript对正则表达式的支持,则此链接非常好Regular Expression - VBScript

Dim myRegExp, myMatches id Set myRegExp = New RegExp myRegExp.Global = True myRegExp.Pattern = ".*ID:.*{(.*)}.*" Set myMatches = myRegExp.Execute(subjectString) id = myMatches(0).SubMatches(0)

使用此解决方案的警告

  • 如果输出因机器而异,您可能需要调整正则表达式(您是否有多个保护器?)

如果您不熟悉正则表达式Expresso是一个有用的测试/学习工具

答案 1 :(得分:0)

谢谢大卫。

我只有一个备份保护器,还有一个驱动器。

正如我所说的那样,当计算机的语言是英语时,一切都很完美,但是因为我有一种语言用一些特殊字符替换“数字密码”的语言,如“锓ñ” “它将无法识别,变量将获得空白值。

也许是因为vbscript这种方式不能处理unicode。

为了说明我的说法,这里是与我的第一篇文章相同的屏幕截图,但是用法语:

enter image description here