mirror of
https://github.com/freedbygrace/Dynamic-OSD-Application-List.git
synced 2026-07-26 11:28:20 +00:00
145 lines
5.2 KiB
Plaintext
145 lines
5.2 KiB
Plaintext
'Set object values
|
|
Set oArguments = WScript.Arguments.Named
|
|
Set oFSO = CreateObject("Scripting.FileSystemObject")
|
|
Set oShell = CreateObject("WScript.Shell")
|
|
Set oCMD = oFSO.GetFile(oShell.ExpandEnvironmentStrings("%COMSPEC%"))
|
|
Set oPowershell = oFSO.GetFile(oShell.ExpandEnvironmentStrings("%WINDIR%") & "\System32\WindowsPowershell\v1.0\powershell.exe")
|
|
|
|
'Define ASCII Characters
|
|
chrSpace = Chr(32)
|
|
chrSingleQuote = Chr(39)
|
|
chrDoubleQuote = Chr(34)
|
|
|
|
'Define Variable(s)
|
|
ScriptInterpreter = CreateObject("Scripting.FileSystemObject").GetFileName(WScript.FullName)
|
|
If (oArguments.Exists("Debug") = True) Then DebugMode = True End If
|
|
|
|
'Dynamically convert named VBScript arguments to their eqivalent powershell format
|
|
oArgumentCount = oArguments.Count
|
|
|
|
If (oArgumentCount > 0) Then
|
|
StringBuilder = ""
|
|
|
|
oArgumentCounter = 1
|
|
|
|
Set ArgumentNameExpression = New RegExp
|
|
|
|
With ArgumentNameExpression
|
|
.Pattern = "^Debug$"
|
|
.IgnoreCase = True
|
|
.Global = False
|
|
.Multiline = False
|
|
End With
|
|
|
|
Set ArgumentValueExpression = New RegExp
|
|
|
|
With ArgumentValueExpression
|
|
.Pattern = "^.*True|.*False$"
|
|
.IgnoreCase = True
|
|
.Global = False
|
|
.Multiline = False
|
|
End With
|
|
|
|
For Each oArgument In oArguments
|
|
ArgumentName = Trim(oArgument)
|
|
ArgumentValue = oArguments.Item(oArgument)
|
|
|
|
If (Not(ArgumentNameExpression.Test(ArgumentName))) Then
|
|
Select Case ((Len(ArgumentValue) > 0) And (Not(ArgumentValueExpression.Test(ArgumentValue))))
|
|
Case True
|
|
If (InStr(ArgumentValue, ",") > 0) Then
|
|
ArgumentValueParts = Split(ArgumentValue, ",")
|
|
|
|
ArgumentValuePartsCount = UBound(ArgumentValueParts)
|
|
|
|
ArgumentValuePartStringBuilder = ""
|
|
|
|
ArgumentValuePartCounter = 0
|
|
|
|
For Each ArgumentValuePart In ArgumentValueParts
|
|
ArgumentValuePartFormat = chrDoubleQuote & ArgumentValuePart & chrDoubleQuote
|
|
|
|
ArgumentValuePartStringBuilder = ArgumentValuePartStringBuilder & ArgumentValuePartFormat
|
|
|
|
If ((ArgumentValuePartsCount > 0) And (ArgumentValuePartCounter < ArgumentValuePartsCount)) Then
|
|
ArgumentValuePartStringBuilder = ArgumentValuePartStringBuilder & ","
|
|
ArgumentValuePartCounter = ArgumentValuePartCounter + 1
|
|
End If
|
|
Next
|
|
|
|
ParameterFormat = "-" & ArgumentName & chrSpace & ArgumentValuePartStringBuilder
|
|
ElseIf (IsNumeric(ArgumentValue) = True) Then
|
|
ParameterFormat = "-" & ArgumentName & chrSpace & ArgumentValue
|
|
Else
|
|
ParameterFormat = "-" & ArgumentName & chrSpace & chrDoubleQuote & ArgumentValue & chrDoubleQuote
|
|
End If
|
|
Case False
|
|
ParameterFormat = "-" & ArgumentName
|
|
End Select
|
|
|
|
If (Len(ParameterFormat) > 0) Then
|
|
|
|
If ((oArgumentCount > 1) And (oArgumentCounter < oArgumentCount)) Then
|
|
StringBuilder = StringBuilder & chrSpace
|
|
End If
|
|
|
|
StringBuilder = StringBuilder & ParameterFormat
|
|
|
|
ArgumentCounter = oArgumentCounter + 1
|
|
|
|
ParameterFormat = Null
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
StringBuilderResult = Trim(StringBuilder)
|
|
|
|
If (Len(StringBuilderResult) > 0) Then
|
|
PowershellScriptParameters = StringBuilderResult & ";" & chrSpace & "[System.Environment]::Exit(($LASTEXITCODE -Bor [Int](-Not $? -And -Not $LASTEXITCODE)))"
|
|
Else
|
|
If (DebugMode = True) Then
|
|
WScript.Echo("Debug mode is enabled. The specified command will NOT be executed.")
|
|
End If
|
|
|
|
PowershellScriptParameters = ";" & chrSpace & "[System.Environment]::Exit(($LASTEXITCODE -Bor [Int](-Not $? -And -Not $LASTEXITCODE)))"
|
|
End If
|
|
|
|
Set ArgumentNameExpression = Nothing
|
|
|
|
Set ArgumentValueExpression = Nothing
|
|
Else
|
|
If (DebugMode = True) Then
|
|
WScript.Echo(oArgumentCount & chrSpace & "arguments were specified.")
|
|
End If
|
|
End If
|
|
|
|
'Define Additional Variable(s)
|
|
Set ScriptPath = oFSO.GetFile(WScript.ScriptFullName)
|
|
ScriptDirectory = ScriptPath.ParentFolder
|
|
System32Directory = oShell.ExpandEnvironmentStrings("%WINDIR%") & "\System32"
|
|
CommandPromptExecutionParameters = oCMD.Name & chrSpace & "/c"
|
|
PowershellExecutionParameters = chrDoubleQuote & oPowershell.Path & chrDoubleQuote & chrSpace & "-ExecutionPolicy Bypass -NonInteractive -NoProfile -NoLogo -WindowStyle Hidden -Command"
|
|
PowershellScriptPath = ScriptDirectory & "\" & oFSO.GetBaseName(ScriptPath) & ".ps1"
|
|
|
|
'Execute Powershell Script
|
|
If (Len(PowershellScriptParameters) > 0) Then
|
|
Command = PowershellExecutionParameters & chrSpace & chrDoubleQuote & "&" & chrSpace & chrSingleQuote & PowershellScriptPath & chrSingleQuote & chrSpace & PowershellScriptParameters & chrDoubleQuote
|
|
Else
|
|
Command = PowershellExecutionParameters & chrSpace & chrDoubleQuote & "&" & chrSpace & chrSingleQuote & PowershellScriptPath & chrSingleQuote & chrDoubleQuote
|
|
End If
|
|
|
|
If ((ScriptInterpreter = "cscript.exe") Or (DebugMode = True)) Then
|
|
WScript.Echo("Command:" & chrSpace & Command)
|
|
End If
|
|
|
|
If (DebugMode = False) Then
|
|
RunCommand = oShell.Run(Command, 0, True)
|
|
End If
|
|
|
|
If ((ScriptInterpreter = "cscript.exe") Or (DebugMode = True)) And (IsEmpty(RunCommand) = False) Then
|
|
WScript.Echo("Exit Code:" & chrSpace & RunCommand)
|
|
End If
|
|
|
|
If (DebugMode = False) Then
|
|
WScript.Quit(RunCommand)
|
|
End If |