【问题标题】:Trying to convert powershell script to VBscript尝试将 powershell 脚本转换为 VBscript
【发布时间】:2020-02-23 17:42:27
【问题描述】:

在 Lee_Dailey 和 js2010 的帮助下解决了这个问题!谢谢各位!

编辑 我试图弄清楚为什么当它通过 SCCM 部署到一组计算机时会出现误报。我得到的设备不合规,而实际上它们是不合规的。 SCCM 操作员要求我提供脚本的 VB 版本。我正在删除潜在的原因。

我正在尝试将 PowerShell 脚本的功能转换为 VBScript。该脚本检查设备上的 AzureAdPrt 令牌,但挑战在于该命令的输出,因为它在表格中格式化,我只想检查特定值。

我试图将该技术复制到 VBScript,但我没有这方面的经验。

Powershell 代码:

    $dsregcmd = dsregcmd /status
    $PRTDetails = New-Object -TypeName PSObject
    $dsregcmd | Select-String -Pattern " *[A-z]+ : [A-z]+ *" | ForEach-Object {
              Add-Member -InputObject $PRTDetails -MemberType NoteProperty -Name (([String]$_).Trim() -split " : ")[0] -Value (([String]$_).Trim() -split " : ")[1]
         }
$PRT_Status = ($PRTDetails).AzureAdPrt
IF($PRT_Status -eq 'YES'){
    return $True
}ELSE{
    return $False
}

VB 代码:

Set oShell = CreateObject ("WScript.Shell")
oShell.run "cmd /c dsregcmd /status"
IF oShell = "AzureAdPrt : YES"
  echo $true
ELSE
  echo $false

我正在寻找的是 VBScript,如果 AzureAdPrt 等于 YES,则返回 $true,否则返回 $False。

【问题讨论】:

  • 你需要解析dsregcmd的输出。现在您的代码与 entire 输出进行比较,而不是您关心的部分。所以...将该输出捕获到 $Var,研究模式,并将其应用到您的 VBScript 代码中。
  • 你为什么要这样做?如果不出意外,VBScript 可以调用 PoSh。但我怀疑您正在解决由另一个问题引起的问题。你的问题背后的原因是什么?
  • 您是否有某种原因要将其转换为 VBS 而不是仅作为 PS 保留?我的经验是,PS 在代码上通常比 VBS 更灵活,更少“尴尬”,MS 强烈主张将 VBS 转换为 PS,而不是相反。
  • @Lee_Dailey - 感谢您的提示!我更喜欢 PS,但我试图弄清楚为什么当它通过 SCCM 部署到一组计算机时会出现误报。我得到的设备不合规,而实际上它们是不合规的。 SCCM 操作员要求我提供脚本的 VB 版本。我正在删除潜在的原因。
  • vbscript 中的正则表达式:robvanderwoude.com/vbstech_regexp.php

标签: powershell vbscript conditional-statements


【解决方案1】:

您可以使用 vbscript 尝试类似的操作:Demo Here

Option Explicit
Dim oShell,Data,Extracted_Data
Set oShell = CreateObject ("WScript.Shell")
oShell.run "cmd /c dsregcmd /status > .\AzureLog.txt",0,True
Data = ReadFile(".\AzureLog.txt")
wscript.echo Data
Extracted_Data = Extract(Data)

IF Extracted_Data = "AzureAdPrt : YES" Then
    wscript.echo Extracted_Data & vbCrlf & "True"
Else
    wscript.echo Extracted_Data & vbCrlf & "False"
End If

'---------------------------------------------------------------
Function ReadFile(path)
    Const ForReading = 1
    Dim objFSO,objFile
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(path,ForReading)
    ReadFile = objFile.ReadAll
    objFile.Close
End Function
'---------------------------------------------------------------
Function Extract(Data)
    Dim RegEx,Match,Matches,M
    Set RegEx = New RegExp
    With RegEx
        .Pattern = "\bAzureAdPrt : \w+"
        .IgnoreCase = True
        .Global = True
    End With
    Set Matches = RegEx.Execute(Data)
    'Iterate through the Matches collection.
    For Each Match in Matches
        'We only want the first match.
        M = Match.Value
        Exit For
    Next
    Extract = M
    'Clean up
    Set Match = Nothing
    Set RegEx = Nothing
End Function
'---------------------------------------------------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多