gpt4 book ai didi

.net - Powershell 安装所需的 dotnetframework 版本

转载 作者:行者123 更新时间:2023-12-02 23:50:34 25 4
gpt4 key购买 nike

我的客户没有 Puppet 或 Chef 或 Choco,我无法在他的服务器上安装它们来安装我的应用程序。

  • 检查已安装的 dotnet 框架版本。
  • 转换成 '。'拆分字符串
  • 转换为 System.Version(有些有 2 拆分或 3 拆分数组
  • 与所需的 dotnetframework 版本进行比较,例如4.6.2
  • 如果安装了更高版本,则中止
  • 如果没有,则安装所需框架版本的 MSI/EXE

  • 第 1 步:检查 dotnet 版本为 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 $_

    结果:Select-String:无法将参数绑定(bind)到参数“模式”,因为它为空。
    | {Select-String $_}

    结果:表达式只允许作为管道的第一个元素。
    |Select-Object $_.GetType

    未列出版本类型
    |Select-Object $_.Split(".")

    结果:您不能在空值表达式上调用方法。

    编辑:@Theo 答案很好,它现在可以包装安装 .net 4.6.2 逻辑,即:
    $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

    最佳答案

    我同意 Moerwald 将注册表值转换为 [Version]对象,因此与最小版本进行比较将变得容易。

    而不是过滤 Full马上,我个人想首先获得所有已安装版本的数组,然后从中选择我需要的:

    $minVersion = [version]'4.6.2'

    $netVersions = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
    Get-ItemProperty -name Version, Release -ErrorAction SilentlyContinue |
    Select-Object @{Name = 'Version'; Expression = {[Version]$_.Version}},
    @{Name = 'Type'; Expression = {$_.PSChildName}}

    # display all installed version if you like
    # $netVersions

    # get the highest installed Full version
    $highestVersion = $netVersions | Where-Object { $_.Type -match 'Full' } | Sort-Object | Select-Object -Last 1

    # and compare that to the minimum function you need
    if ($highestVersion.Version -lt $minVersion) {
    Write-Host "Installing .NET Framework $($minVersion.ToString())"
    # do the install here
    }
    else {
    Write-Host "Nothing to do here, client has version $($highestVersion.Version.ToString())"
    }

    关于.net - Powershell 安装所需的 dotnetframework 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60371334/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com