我们可以检查Powershell Scripts所需的Powershell / WPF / .Net版本吗?

时间:2017-12-30 16:59:41

标签: .net wpf powershell version .net-framework-version

我希望能够看到我的脚本与早期版本的软件兼容的程度,所以,我想看看我的脚本需要运行的最低版本的Powershell,.Net和WPF。 我想如果我知道如何检索有关每个.Net类和PowerShell cmdlet的信息以及它们引入的版本,我将能够实现这一目标。

编辑:

我可能还不够清楚,所以这里有一些在线手动找到的例子。但是,我希望能够通过PowerShell获取此信息。但正如Ansgar Wiechers所说,这些信息可能不容易获得。我只是希望有人可能已经这样做了,或者知道如何获取这些信息。

例如。

[System.Net.NetworkInformation.Ping] - 自.Net 2.0以来可用(在https://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping(v=vs.110).aspx#Anchor_8找到)

Get-CIMInstance - 自Powershell 3.0(第一段中找到https://blogs.msdn.microsoft.com/powershell/2012/08/24/introduction-to-cim-cmdlets/)起可用

1 个答案:

答案 0 :(得分:0)

根据OP的澄清

进行编辑

如果您正在寻找按照您的链接所指示的每WMF版本发布的cmdlet ...

'自.Net 2.0起可用' '从Powershell 3.0开始'

...然后,TechNet在此提供:

PowerShell 1.0 Cmdlet 这些是可以在Windows PowerShell 1.0中使用的cmdlet列表。 https://social.technet.microsoft.com/wiki/contents/articles/13769.powershell-1-0-cmdlets.aspx

PowerShell 2.0 Cmdlet 这些是可以在Windows PowerShell 2.0中使用的cmdlet列表。 https://social.technet.microsoft.com/wiki/contents/articles/13876.powershell-2-0-cmdlets.aspx

PowerShell 3.0 Cmdlet 这些是Windows 8开发人员预览版中提供的cmdlet,别名和函数 https://social.technet.microsoft.com/wiki/contents/articles/4694.powershell-3-cmdlets.aspx

请注意,我找不到像v4 - v6(PowerShellCore)这样的列表。

但是有这样的: 本主题列出了Windows PowerShell 3.0,Windows PowerShell 4.0和Windows PowerShell 5.0的系统要求,以及Windows PowerShell集成脚本环境(ISE),CIM命令和工作流等特殊功能。 https://docs.microsoft.com/en-us/powershell/scripting/setup/windows-powershell-system-requirements?view=powershell-5.1

考虑你的意思。如果这是我。我开始的方法是站起来一组原始的VM客户端(或者交给我们认识的人使用适当的操作系统),安装了适用于操作系统的RTM WMF版本并运行以下内容,保存到文件。

然后使用该文件作为代码的基础比较。这意味着,在我的所有模块,函数和脚本上使用Select-String并匹配cmdlet名称,以将比较文件中的其他属性转换为代码比较报告。

任何cmdlet名称都匹配,可能是扫描的代码具有从特定PoSH版本使用的cmdlet的基线指示符。因此假设扫描的代码是在OS WMF RTM版本上编写的,或者是使用-version开关为给定的WMF版本编写的。

Report host OS, WMF and CLR version information

$OSVersion = (Get-WmiObject -Class Win32_OperatingSystem).Caption
Get-Command | Where CommandType -Match cmdlet | 
Select Name, Version,
@{Name = 'PSCompatible';Expression = {$PSVersionTable.PSCompatibleVersions}},
@{Name = 'CLR';Expression = {$PSVersionTable.CLRVersion}},
@{Name = 'WSMan';Expression = {$PSVersionTable.WSManStackVersion}},
@{Name = 'Remoting';Expression = {$PSVersionTable.PSRemotingProtocolVersion}},
@{Name = 'OS';Expression = {$OSVersion}} | 
Sort-Object Version | Format-Table -AutoSize


Name                        Version     PSCompatible            CLR             WSMan Remoting OS                      
----                        -------     ----------              ---             ----- -------- --                      
Enable-SqlAlwaysOn          1.0         {1.0, 2.0, 3.0, 4.0...} 4.0.30319.42000 3.0   2.3      Microsoft Windows 10 Pro
Set-SqlAuthenticationMode   1.0         {1.0, 2.0, 3.0, 4.0...} 4.0.30319.42000 3.0   2.3      Microsoft Windows 10 Pro
Disable-SqlAlwaysOn         1.0         {1.0, 2.0, 3.0, 4.0...} 4.0.30319.42000 3.0   2.3      Microsoft Windows 10 Pro
Set-RuleOption              1.0         {1.0, 2.0, 3.0, 4.0...} 4.0.30319.42000 3.0   2.3      Microsoft Windows 10 Pro
Set-HVCIOptions             1.0         {1.0, 2.0, 3.0, 4.0...} 4.0.30319.42000 3.0   2.3      Microsoft Windows 10 Pro
...


Get summary cmdlets by cmdlet version
Get-Command | Group-Object Version | Sort-Object Name -Descending | Format-Table -AutoSize


Count Name        Group                                                                                                                               
----- ----        -----                                                                                                                               
   37 4.2.3       {Add-NTFSAccess, Add-NTFSAudit, Clear-NTFSAccess, Clear-NTFSAudit...}                                                               
   33 4.0.6       {Add-AssertionOperator, AfterAll, AfterEach, AfterEachFeature...}                                                                   
  196 3.1.0.0     {ConvertFrom-SddlString, Format-Hex, Get-FileHash, Import-PowerShellDataFile...}                                                    
   97 3.0.0.0     {Add-History, Add-PSSnapin, Clear-History, Connect-PSSession...}                                                                    
...
然而,我对此的最后一点想法是,为什么要这么努力?

我们知道遗留代码将在更高版本中运行,而后来版本特定的模块/ cmdlet /交换机很可能在旧版OS / PS版本中无法原生工作。好吧,除非你手动,破解东西,复制它们或使用远程处理代理它们,做下面的事情。

 Use using current version cmdlets while on a legacy OS, i.e, Win7SP1 needing to use Test-NetConnection

$RemotePoSHModuleUNCFolder = '\\WS2012r2\$C\Windows\System32\WindowsPowerShell\v1.0\Modules'
$LocalhostPoSHModuleUNCFolder = 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules'
'NetTCPIP','DnsClient','NetSecurity' `
| % {Copy-Item -Path $RemotePoSHModuleUNCFolder\$_ -Destination $LocalhostPoSHModuleUNCFolder}

'NetTCPIP','DnsClient','NetSecurity' `
| % {Import-Module -Name "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\$_" -Verbose}

# Use cmdlet proxy, import module from remote machine WS201R2
$W2K12RemoteSession = New-PSSession -ComputerName 'WS2K12'
Import-Module NetTCPIP -PSSession $W2K12RemoteSession

MS公布了v2的折旧,如果.Net 4x在主机上,则v2出现问题:

“不支持在.NET Framework 4.0中使用PowerShell 2.0。这是由于CLR 4的运行时激活策略发生了一些变化,这些更改阻止了针对CLR 2构建的应用程序自动前滚到CLR 4。”

详情请见https://msdn.microsoft.com/en-us/magazine/ee819091.aspx

除非你有V2及以下版本的旧版操作系统,否则我不确定比较会买你的。

但你发布的声音对于添加到PSScriptAnalyzer来说是一个好主意。