В моем клиенте нет Puppet, Chef или Choco, и я не могу установить их на его сервер для установки моего приложения.
- Проверить установленные версии do tnet framework.
- Конвертировать в '.' разделенная строка
- Преобразовать в System.Version (в некоторых есть 2 или 3 разделенных массива
- Сравнить с требуемой версией dotnetframework, например, 4.6.2
- Если установлена более высокая версия, прервать
- Если нет, то установите MSI / EXE нужной версии фреймворка
Шаг 1: Проверьте версию tnet как System.Version:
Пока у меня есть :
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
Where-Object { $_.PSChildName -match 'Full'} |
Select-Object Version
Но GetType, Split, Select-String просто не работают для меня.
Ошибки и код, которые до сих пор пробовали:
| Select-String $_
результаты in: Select-String: Невозможно привязать аргумент к параметру 'Pattern', поскольку он имеет значение null.
| {Select-String $_}
приводит к: Выражения допускаются только в качестве первого элемента конвейера.
|Select-Object $_.GetType
Не указывается тип версии
|Select-Object $_.Split(".")
приводит к следующему: Вы не можете вызвать метод для выражения с нулевым значением.
Редактировать: ответ @Theo хорош, теперь его можно переносить установка. net 4.6.2 logi c, что:
$SourceURI = "https://download.microsoft.com/download/F/9/4/F942F07D-F26F-4F30-B4E3-EBD54FABA377/NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
$FileName = $SourceURI.Split('/')[-1]
$BinPath = Join-Path $env:TEMP -ChildPath "dotnet462\$FileName"
if (!(Test-Path $BinPath))
{
Invoke-Webrequest -Uri $SourceURI -OutFile $BinPath
}
write-verbose "Executing $binpath /q /norestart"
Sleep 5
Start-Process -FilePath $BinPath -ArgumentList "/q /norestart" -Wait -NoNewWindow