簡體   English   中英

解析powershell腳本參數

[英]Parse powershell script parameters

有沒有一種簡單的方法可以從powershell腳本文件中解析params

param(
    [string]$name,
    [string]$template
)

我已經開始閱讀該文件並想知道是否有更好的方法,可能是通過help / man命令?

class PowerShellParameter {
    public string Name;
    public string Type;
    public string Default;
}

string[] lines = File.ReadAllLines(path);
bool inparamblock = false;
for (int i = 0; i < lines.Length; i++) {
    if (lines[i].Contains("param")) {
        inparamblock = true;
    } else if (inparamblock) {
        new PowerShellParameter(...)
        if (lines[i].Contains(")")) {
            break;
        }
    }
}

至少有兩種可能性。 第一個(imho更好):使用Get-Command

# my test file
@'
param(
  $p1,
  $p2
)

write-host $p1 $p2
'@ | Set-content -path $env:temp\sotest.ps1
(Get-Command $env:temp\sotest.ps1).parameters.keys

對於所有成員來看看

Get-Command $env:temp\sotest.ps1 | gm
#or
Get-Command $env:temp\sotest.ps1 | fl *

另一種(更難的方法)是使用正則表達式

[regex]::Matches((Get-Help $env:temp\sotest.ps1), '(?<=\[\[-)[\w]+') | select -exp Value

我喜歡@stej提出的Get-Command解決方案。 不幸的是,如果腳本參數指定了顯式類型並且尚未將此類型的程序集加載到會話中,則它不起作用。 這就是為什么我仍然使用這個腳本: 獲取腳本參數的名稱

我不確定你要追求的是什么,它是否記錄了你的腳本? 在這種情況下,請查看Get-Help about_Comment_Based_Help 它將告訴您如何執行此操作,之后您可以在腳本/模塊上使用Get-Help

如果您about_functions_advanced_parameters更嚴格的參數處理,請查看about_functions_advanced_parametersabout_functions_cmdletbindings ,了解如何更好地構造參數。 例如,

[Parameter(Position=0,Mandatory=$true,HelpMessage='Enter architecture("OSX","WinXP","Win7","Linux")')] [ValidateSet("OSX","WinXP","Win7","Linux")] [string]$architecture

將使該參數成為必需參數,從命令的位置0讀取,僅允許來自給定集合的值,並在詢問輸入時給出簡短的幫助消息(如果未給出該參數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM