由于存在安全漏洞,我需要找到PowerShell在我的服务器上使用的.net版本。有许多文章详细介绍了如何找到.net Core的SDK或运行时版本。但是,这些解决方案在我的工作站或服务器上不起作用。我没有dotnet.exe
命令,而且我的计算机上似乎没有安装任何.net,即使安装了PowerShell 7.32。
如何找到PowerShell正在使用的.net版本?
我尝试了一些出现在互联网上各种文章中的解决方案。然而,他们都没有产生任何结果。
由于存在安全漏洞,我需要找到PowerShell在我的服务器上使用的.net版本。有许多文章详细介绍了如何找到.net Core的SDK或运行时版本。但是,这些解决方案在我的工作站或服务器上不起作用。我没有dotnet.exe
命令,而且我的计算机上似乎没有安装任何.net,即使安装了PowerShell 7.32。
如何找到PowerShell正在使用的.net版本?
我尝试了一些出现在互联网上各种文章中的解决方案。然而,他们都没有产生任何结果。
2条答案
按热度按时间lnlaulya1#
所以事实证明,当你安装PowerShell Core时,它实际上并没有将.net core安装为应用程序/SDK/运行时等。
PowerShell只是将.net核心文件复制到自己的文件夹中。在默认安装中,该文件夹位于以下位置:
"$env:ProgramFiles\powershell\7"
以下是一个快速函数,用于获取PowerShell核心安装所使用的.net核心dll的当前版本,如果您将其安装在MS Windows平台上的默认位置:
mpgws1up2#
实际上,PowerShell (Core) 7+是一个所谓的 * 自包含 * .NET(核心)应用程序:也就是说,它与自己的.NET(核心)运行时的私有副本捆绑在一起。
如果捆绑的.NET版本中存在已知的安全漏洞,则避免的唯一方法是升级到新版本 * 的PowerShell*,该版本附带更新的.NET版本,其中已修补该漏洞。
Installing PowerShell on Windows介绍了以便于升级或自动升级的方式安装PowerShell(Core)的选项:
winget
-推荐的方法-允许以后使用winget upgrade
按需升级(尽管这种方法实际上在x64/x86机器上安装MSI软件包,因此应该导致 * 自动 * 升级-请参阅下一点)确定给定PowerShell安装的底层.NET版本的最简单方法是使用
System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
:注意结果是一个 string;例如:
(This也适用于 Windows PowerShell v5.1,适用于它所依赖的.NET Framework的 * 共享 * 版本,例如
.NET Framework 4.8.9139.0
;在给定计算机上唯一的Windows PowerShell副本总是与Microsoft Update集成;请注意,Windows PowerShell已不再积极开发,并且 * 仅 * 接收安全关键型更新。