2015-07-23 3 views
2

настоящее время у меня этот код, приведенный ниже в моем Powershell скрипт, который устанавливает для всех версий IE до 11 лет, так что это исключает бы из установки для Windows 8.Обнаружение Windows 8 в Powershell

# Get the Internet Explorer version 
$ieVersion = Get-Item "HKLM:Software\Microsoft\Internet Explorer" -ErrorAction SilentlyContinue | Get-ItemProperty | Select "svcVersion" -ExpandProperty "svcVersion" 
$ieSubstringPos = $ieVersion.IndexOf(".") 
[int]$ieShortVersion = $ieVersion.Substring(0, $ieSubstringPos) 


## <Perform Installation tasks here> 
If ($ieShortVersion -lt 11) { 
    Execute-MSI -Action Install -Path "install_flash_player_18_active_x.msi" -Parameters "/qn" 
} 

Сейчас мы переходящих к IE11 в нашей среде, чтобы больше не работать. Есть ли способ, которым я могу сделать то же самое, но обнаруживать для окон 7 x64 и x32

+2

двойного кода ... двойное удовольствие! – Cole9350

ответ

1

Если вы хотите получить версию Windows, вы можете просто запросить WMI. Пример:

$OS = Get-WmiObject -Class Win32_OperatingSystem ` 
    | Select-Object -Property @("Version", "OSArchitecture") 
$OS | Format-List 

выхода (для Win7 x64):

Version  : 6.1.7601 
OSArchitecture : 64-bit 

Затем вы можете использовать switch или if операторов для выполнения различного кода в зависимости от версии и или арки. Пример:

switch -Regex ($OS.Version) { 
    "^6\.1\." { 
     # Windows 7 
     if ($OS.OSArchitecture -eq "64-bit") { 
      # do something 
     } else { 
      # do something else 
     } 
    } 
    "^6\.[23]\." { 
     # Windows 8 or Windows 8.1 
     if ($OS.OSArchitecture -eq "64-bit") { 
      # do something 
     } else { 
      # do something else 
     } 
    } 
    default { 
     Write-Error "Unexpected OS version." 
    } 
} 

Win32_OperatingSystem класса есть много других свойств, которые могут оказаться полезными, если вам нужно, чтобы сузить условия дальше. См. MSDN reference.

+0

Работал отлично спасибо! –

+0

Это произойдет с «Неожиданной версией ОС», когда вы перейдете на Windows 10 (который выйдет через шесть дней). Проверка версии ОС не является правильным решением этой проблемы. Вы должны проверить, какая функция вам нужна (Flash в этом случае) –

+0

Windows 10 не будет проблемой, так как SCCM определяет, где этот скрипт может работать. Я предполагаю, что другим способом решить это будет сохранить ваш сценарий alexander как есть, а просто добавить «все другие версии os» сделать это заявление. Есть ли способ сделать это? –

0

Попытка определить, какая версия вы находитесь, почти всегда является неправильным решением вашей проблемы. Как вы узнали, версия ОС не является гарантией того, какое программное обеспечение установлено, и ваш код, скорее всего, сломается в будущем, когда будет выпущена следующая версия ОС, и Microsoft начнет использовать функции backporting.

Если я правильно прочитал, проблема, которую вы хотите решить, - убедиться, что Flash установлен на компьютерах с IE11. Для этого вы должны не попытаться обнаружить ОС. Вместо этого попытайтесь определить, установлена ​​ли Flash.

$FlashIsInstalled = $true 
try { 
    $flashobject = new-object -ComObject "shockwaveflash.shockwaveflash" 
    $version=$flashobject.getvariable("`$version") 

    # Optional: Check for correct version here 
} 
Catch{ 
    $FlashIsInstalled = $false 
} 

If (-not $FlashIsInstalled) { 
    Execute-MSI -Action Install -Path "install_flash_player_18_active_x.msi" -Parameters "/qn" 
} 

Решение от http://andrewmorgan.ie/2012/01/retrieve-adobe-flash-version-with-powershell/

+0

На самом деле я тестирую x32, x64 версии окон 7 и 8.1 и, похоже, работает нормально. На самом деле я не хочу, чтобы flash устанавливался для Windows 8.1, поскольку он уже установлен с окнами «active_x» и обновляется через wsus. Но я хочу, чтобы он установил active_X на Windows 7, так как это не так. Следовательно, мне нужно будет обнаружить ОС. У меня также есть методы обнаружения в SCCM, чтобы работать только в версии, указанной в скрипте. –

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