2016-03-23 8 views
2

私はスクリプトの先頭に#Requires -Versionを入れていますが、どのバージョンが必要かを理解する必要があります。私はPowerShellのどのバージョンが私が呼び出すコマンドレットを導入したのかを問い合わせたいと思っていました。しかし、いずれかのコマンドレットの出力がGet-Help -verboseには表示されません。私はそれのための標準的なWebページのリストを見つけることができませんでした。PowerShellのバージョンによっては、特定のコマンドレットが導入されましたか?

特定のコマンドレットを導入したPowerShellのバージョンを調べる標準的な方法があれば誰でも知っていますか?あるいは、私がやろうとしていることを達成する良い方法がありますか?

+1

私は通常、特定のコマンドレット(引数とタイプではなく、役に立たない「fooというコマンドを使用する」ページを持つ1)については、MSDNのドキュメントをチェックして、バージョンが場所を確認するためにドロップダウンチェック始まる。 – Eris

答えて

6

私が知っている限り、これを見るための「標準的な」方法はMSDNを読むことです。あなたはかなり簡単に、たとえば、Get-Helpため-Onlineスイッチを使用して、関連するページを取得することができます:-):

Get-Help -Name "Get-DscConfiguration" -Online 

別のアプローチは、特定のバージョンを設定する-Versionスイッチを使用してたpowershell.exeを起動するかもしれません、例えばpowershell.exe -Version 2Get-Commandコマンドレットを使用して、コマンドレットがリストされているかどうかを確認します。


私は自分自身を楽しんでいます!スクリプトを解析し、コマンドが異なるPSバージョンの有効なコマンドレットである場合にうまく動作するように見えるコードがいくつかあります。この時点では、Start-Jobのスイッチ-PSVersionによって「1.0」または「5.0」がサポートされているようには見えません。

param(
    $file = 'C:\scripts\PowerShell\Toolkit\Get-PSVersionCompatibility.ps1' 
) 

New-Variable tokens 
New-Variable parseerrors 
$p = [System.Management.Automation.Language.Parser]::ParseFile($file,[ref]$tokens,[ref]$parseerrors) 
$Commands = $tokens | ?{$_.TokenFlags -contains "CommandName"} | Sort -Unique | Select Value 

$ScriptBlock = { 
    param($PSVersion,$Commands) 

    $Output = New-Object -TypeName PSObject -Property @{PSVersion = $PSVersion} 


    foreach($Command in $Commands) { 
    if([String]::IsNullOrEmpty($Command.Value)){continue} 

    if(Get-Command | ?{$_.Name -eq $Command.Value}) { 
     $Available = $true 
    } else { 
     $Available = $false 
    } 

    $Output | Add-Member -MemberType NoteProperty -Name $($Command.Value) -Value $Available 
    } 

    return $Output 
} 

$Results = @() 

foreach($PSVersion in 2..4) { 
    $job = Start-Job -PSVersion "$PSVersion.0" -ScriptBlock $ScriptBlock -ArgumentList $PSVersion,$Commands 

    Wait-Job $job | Out-Null 
    $Results += (Receive-Job $job | Select PSVersion,*-*) 
    Remove-Job $job 
} 

$Results | FT -AutoSize 

Remove-Variable tokens 
Remove-Variable parseerrors 

+1

どのような宝石!非常にクールなツール! – Nick

+0

残念ながら、新しい "docs.micrsosoft .."が公開されて以来、私はもう "バージョンで紹介された"を見つけることができません...どんなものであれ、あなたのソリューションは本当に強力です。ありがとう!私はそれをオープンソースライブラリに追加して拡張しました。それが大丈夫であれば教えてください:https://github.com/AstralisSomnium/PowerShell-No-Library-Just-Functions – AstralisSomnium

+0

問題ない。 –

関連する問題