O que seria um script do PowerShell para retornar versões do .NET Framework em uma máquina?
Meu primeiro palpite é algo que envolve o WMI. Existe algo melhor?
Deve ser uma linha única retornar apenas a versão mais recente para cada instalação do .NET [em cada linha].
.net
powershell
version
MattUebel
fonte
fonte
asp.net -v
Respostas:
Se você for usar o registro, precisará recursar para obter a versão completa do Framework 4.x. As respostas anteriores retornam o número raiz no meu sistema para o .NET 3.0 (onde os números WCF e WPF, que estão aninhados no 3.0, são mais altos - não posso explicar isso) e falham em retornar qualquer coisa para o 4.0. .
EDIT: Para .Net 4.5 e superior, isso mudou um pouco novamente, então agora há um bom artigo do MSDN explicando como converter a versão versões valor em um número de versão .Net, é uma destruição total de trens :-(
Isso parece correto para mim (observe que ele gera números de versão separados para o WCF e o WPF no 3.0. Não sei do que se trata). Ele também gera o Client e Full no 4.0 (se você os tiver instalado):
Com base no artigo do MSDN, você pode criar uma tabela de pesquisa e retornar o número da versão do produto de marketing para lançamentos após a versão 4.5:
De fato, como eu continuo tendo que atualizar esta resposta, aqui está um script para gerar o script acima (com um pouco mais) da fonte de remarcação da página da web. Provavelmente isso será interrompido em algum momento, por isso estou mantendo a cópia atual acima.
fonte
'^(?!S)\p{L}'
regex e obtendo as informações de Versão e Liberação. O que exatamente é essa expressão regular tentando se qualificar?PSChildName
é o nome da folha da chave do registro.\p{L}
é qualquer caractere na categoria Unicode "letra".(?!S)
é um olhar negativo ao redor e^
é o início da string. Portanto, tem que começar com uma letra diferente deS
. Portanto, se você considerar apenas ASCII, é o mesmo que$_.PSChildName -cmatch '^[A-RT-Za-z]'
(observe o-cmatch
). Portanto, ele encontra as chaves em que o nome começa com uma letra diferente deS
. Não tenho ideia de por que você se importaria com não-ASCII se estiver filtrando nomes começando porS
... Definitivamente com você, por ser tão confuso.Get-ItemProperty -name Version,Release -EA 0
está fazendo. Eu sei que-EA 0
é o mesmo-ErrorAction SilentlyContinue
, mas que efeito teriaGet-ItemProperty -name Version,Release
ao canalizar todos os resultados para ele? Parece não remover nenhuma variável do objeto, pois outras são usadas em comandos posteriores no pipeline. Ele é executado, erro quando o nomeVersion
ouRelease
está ausente da chave e passa objetos onde foi bem-sucedido para o próximo comando no pipeline?(?!S)
cláusula para(?![SW])
excluir ainda mais as entradas "Windows *". Isso também pode ser feito, uma(?=[vCF])
vez que as únicas chaves com as quais realmente nos preocupamos são as raízes da versão e as chaves "Completa" e "Cliente" do .NET 4.0+. ;)Esta resposta não retorna 4.5 se estiver instalada. A resposta abaixo de @Jaykul e usando recurse faz.
fonte
Adicionado suporte v4.8 ao script:
fonte
Fornece uma instância do
Version
CLR que a cópia atual do PSH está usando (conforme documentado aqui ).fonte
$PSVersionTable
para encontrar a versão do CLR PowerShell em execução.Sintaxe correta:
A
GetSystemVersion
função retorna uma string como esta:ou assim
$PSVersionTable
é um objeto somente leitura. A propriedade CLRVersion é um número de versão estruturada como este:fonte
Eu encontrei isso através da conclusão da guia no powershell para osx:
[System.Runtime.InteropServices.RuntimeInformation]::get_FrameworkDescription() .NET Core 4.6.25009.03
fonte
[version]([Runtime.InteropServices.RuntimeInformation]::FrameworkDescription -replace '^.[^\d.]*','')
Não há uma maneira confiável de fazer isso para todas as plataformas e arquiteturas usando um script simples. Se você quiser aprender como fazê-lo de maneira confiável, comece na postagem do blog Exemplo de código de detecção do .NET Framework atualizado que faz uma verificação mais aprofundada .
fonte
Consulte a página Script para descobrir quais versões do .NET estão instaladas em estações de trabalho remotas .
O script pode ser útil para encontrar a versão do .NET para várias máquinas em uma rede.
fonte
Nice solution
Tente usar o módulo DotNetVersionLister que pode ser baixado (com base em informações do registro e em alguma tabela de pesquisa de versão para marketing).
Qual seria usado assim:
Ou assim, se você quiser testá-lo para alguma estrutura .NET> = 4. * :
Mas não funcionará (instalar / importar), por exemplo, com o PS v2.0 ( Win 7 , Win Server 2010 padrão) devido a incompatibilidade ...
Motivação para as funções "herdadas" abaixo
(Você pode pular a leitura e usar o código abaixo)
Tivemos que trabalhar com o PS 2.0 em algumas máquinas e não foi possível instalar / importar o DotNetVersionLister acima .
Em outras máquinas que queríamos para atualizar (do PS 2.0 ) para PS 5.1 (que por sua vez precisa .NET Framework> = 4,5 ) com a ajuda de duas empresas sob medida
Install-DotnetLatestCompany
eInstall-PSLatestCompany
.Para orientar bem os administradores no processo de instalação / atualização, teríamos que determinar a versão .NET nessas funções em todas as máquinas e versões PS existentes.
Assim, usamos também as funções abaixo para determiná-las com mais segurança em todos os ambientes ...
Funções para ambientes PS herdados (por exemplo, PS v2.0 )
Portanto, o código a seguir e os exemplos de uso abaixo (extraídos) são úteis aqui (com base em outras respostas aqui):
Exemplo de uso:
fonte
(Get-DotNetVersion -LocalHost -nosummary).">=4.x"
Feio. Definitivamente não é bonito:
Isso pode ou não funcionar. Mas, no que diz respeito à versão mais recente, isso deve ser bastante confiável, pois existem pastas vazias para versões antigas (1.0, 1.1), mas não para as mais recentes - essas aparecem apenas quando a estrutura apropriada é instalada.
Ainda assim, suspeito que deve haver uma maneira melhor.
fonte
ls $Env:windir\Microsoft.NET\Framework | ? { $_.PSIsContainer -and $_.Name -match '^v\d.[\d\.]+' } | % { $_.Name.TrimStart('v') }
Se você instalou o Visual Studio em sua máquina, abra o prompt de comando do Visual Studio Developer e digite o seguinte comando: clrver
Ele listará todas as versões instaladas do .NET Framework nessa máquina.
fonte
Aqui está minha opinião sobre esta questão, seguindo a documentação do msft :
Este exemplo funciona com todas as versões do PowerShell e funcionará permanentemente, pois 4.8 é a última versão do .NET Framework.
fonte
Aqui está a ideia geral:
Obtenha itens filho no diretório .NET Framework que são contêineres cujos nomes correspondem ao padrão v number number number . Classifique-os por nome descendente, pegue o primeiro objeto e retorne sua propriedade name.
Aqui está o script:
fonte
Eu tentaria este no PowerShell: Funcionou para mim!
(Get-ItemProperty "HKLM: Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full"). Versão
fonte
Não estou familiarizado com a sintaxe do PowerShell, mas acho que você poderia chamar System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion () . Isso retornará a versão como uma string (algo como
v2.0.50727
, eu acho).fonte
[System.Runtime.InteropServices.RuntimeEnvironment]::GetSystemVersion()
:, mas ela retorna a v4.0.30319, mesmo que a v4.6 esteja instalada no meu caso.Este é um derivado do post anterior, mas obtém a versão mais recente do .net framework 4 em meus testes.
O que permitirá que você invoque o comando na máquina remota:
O que configura essa possibilidade com o ADModule e o prefixo da convenção de nomenclatura:
fonte