2015-01-19 2 views
1

Сценарий: Я развертываю пакеты программного обеспечения через SCCM, а иногда они запускают файлы CMD, которые управляют установкой, как только они поступают на компьютер. Для пакетов, которые установлены для запуска в x86 и x64 машинах, условие выглядит следующим образом:Получение платформы ОС через SCCM/CMD/VBS

for /f "Tokens=*" %%i in ('CD') do set CurDir=%%i 
cd "%CurDir%" 
If Exist "C:\program files (x86)" goto X64 
Msiexec /i "x86.msi" 
:X64 
Msiexec /i "x64.msi" 

Но из-за некоторые изменения в нашей среде, что не хватает. Я нашел способ получить эту информацию через VBS (который мы используем здесь, а), но у меня возникают проблемы передачи этого значения по

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")   

Set colOperatingSystems = objWMIService.ExecQuery _ 
    ("Select * from Win32_OperatingSystem") 

For Each objOperatingSystem in colOperatingSystems 
    msg = objOperatingSystem.OSArchitecture 
Next 

Есть ли вообще «переводить», что таким образом я могу conditionalize CMD для запуска правой команды для каждой платформы?

Заранее благодарен!

+0

Вы можете использовать 'Wmic ОС получить OSArchitecture' в пакетный сценарий, но почему? VBScript гораздо более универсален, чем может стоить партия. Вы можете просто ['Run'] (http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.85%29.aspx) установщиков из VBScript. Если что-нибудь, то вы должны перейти к PowerShell, а не назад к пакету. –

+0

Спасибо, Ансгар! Фактически, мы уже изучаем обновление до Powershell, но мы распространяем глобально, а версии PS еще не стандартизированы. Тем не менее, мне нужно было бы найти способ получить эту информацию только через CMD (как и сейчас), так как скрипты vb вызываются только во время ExecSequence MSI ... – Henrique

+1

Так же, как дополнительная идея (я бы, вероятно, не сделайте это сам, так как imo pure vbs - это самый удобный вариант для sccm), чтобы рассмотреть: вы также можете позволить sccm сделать чек. Если вы создаете две программы, вы можете указать, что среда будет исключительно 32-битной на одной и 64-битной, с другой. – Syberdoor

ответ

2

Попробуйте это:

@echo off 
wmic cpu get addresswidth | find "32" >nul && echo system 32 bit || echo system 64 bit 
pause 
+0

он работает, спасибо! Я смог поместить другие команды внутри предложений if/else, и, похоже, он работает на всех машинах/серверах, которые мы в настоящее время используем. Я буду продолжать редактировать его, и, если я найду что-нибудь новое, я отправлю сюда! – Henrique

Смежные вопросы