Есть ли какой-либо стандартный способ найти установленные версии JScript
и VBScript
версий для Windows с помощью команд Powershell
или любым другим способом, например, с помощью установленной версии файла или любого такого путь?Как найти версии двигателей Microsoft JScript и VBScript с помощью powershell
0
A
ответ
5
PS C:\> (get-item "c:\windows\system32\vbscript.dll").VersionInfo.FileVersion
5.812.10240.16384
PS C:\> (get-item "c:\windows\system32\jscript.dll").VersionInfo.FileVersion
5.812.10240.16384
Или, из командной оболочки, вы можете спросить о двигателях.
<?XML version="1.0" standalone="yes" encoding="utf-8" ?>
<package>
<job id="checkVersions" prompt="no">
<?job error="true" debug="false" timeout="10" ?>
<script id="checkVersionVBS" language="VBScript"><![CDATA[
Call WScript.StdOut.WriteLine (_
Join(Array(_
ScriptEngine, ScriptEngineMajorVersion, ScriptEngineMinorVersion, ScriptEngineBuildVersion _
), ".") _
)
]]></script>
<script id="checkVersionJS" language="JScript"><![CDATA[
WScript.StdOut.WriteLine([
ScriptEngine(), ScriptEngineMajorVersion(), ScriptEngineMinorVersion(), ScriptEngineBuildVersion()
].join('.'));
]]></script>
</job>
</package>
Сохраненные в versions.wsf
файл и работать как cscript //nologo versions.wsf
вы получите что-то вроде
W:\>cscript //nologo versions.wsf
VBScript.5.8.16384
JScript.5.8.16384
0
Пожалуйста, примите @MC НСР ответа, а не это.
Обертывание @MC НСР отличный ответ в функцию PowerShell:
Function Get-MSScriptVersions {
@'
<?XML version="1.0" standalone="yes" encoding="utf-8" ?>
<package>
<job id="checkVersions" prompt="no">
<?job error="true" debug="false" timeout="10" ?>
<script id="checkVersionVBS" language="VBScript"><![CDATA[
Call WScript.StdOut.WriteLine(Join(Array(ScriptEngine, ScriptEngineMajorVersion, ScriptEngineMinorVersion, ScriptEngineBuildVersion), "."))
]]></script>
<script id="checkVersionJS" language="JScript"><![CDATA[
WScript.StdOut.WriteLine([ScriptEngine(), ScriptEngineMajorVersion(), ScriptEngineMinorVersion(), ScriptEngineBuildVersion()].join('.'));
]]></script>
</job>
</package>
'@ | Set-Content (Join-Path $env:TEMP versions.wsf)
&cscript //nologo (Join-Path $env:TEMP versions.wsf)
Remove-Item (Join-Path $env:TEMP versions.wsf)
}
# call the function to get the versions
$scriptVersions = Get-MSScriptVersions
$scriptVersions
$scriptVersions
теперь держит массив с двумя входами, как это:
VBScript.5.8.18538
JScript.5.8.18538
Ницца. Попытка проверить мой старый код. В качестве официальных языков сценариев оба 'JScript' и' VBScript' имеют одну и ту же версию с хостом, с которым они связаны. Есть ли возможность '(get-item" c: \ windows \ system32 \ cscipt.exe "). VersionInfo.FileVersion' или' cscript // logo | select-string "\ d + \. \ d + $" | % {$ _. matches [0] .value} 'команд недостаточно, чтобы получить обе языковые версии? –
@ Kul-Tigin, на данный момент у меня нет среды для тестирования, но я помню, что в XP, чтобы оптимизировать поведение в средах ajax, Microsoft обновила только движок JScript (что-то относительно оптимизации небольшой, частой, памяти операции). Чтобы играть в безопасное место, просто мое мнение, вы не должны предполагать, что все будет соответствовать. –