根据用户习惯导出PowerShell命令


每次产品发布前都可能会做一些PowerShell相关的Test pass。而我拿到的测试用例是一张Excel表格,大约是根据Get-Command | select Name |ConvertTo-Csv | Out-File cases.csv 这段命令导出的。

经过多次测试后,我发现有两个需要改进的地方:

  1. 用户更希望同一类命令放在一起,如Get-Location,Pop-Location,Push-Location等。
  2. 同一类命令尽量按照用户习惯排序,如New->Add->Set->Start->Stop->Remove,这样不至于用户轮到测试Stop时,发现已经将目标对象给Remove了,这样他不得不又得创建一个。

接下来要考虑格式的问题了,csv格式貌似不支持跨行跨列。Powershell 通过 com对象操纵excel可以做到,但是不方便,另外性能也跟不上。最终选择了HTML格式,因为HTML格式可以非常方便地复制进Excel等Office软件。
export cmdlets as html format

最后就贴出脚本:

$priorityTable=@{
    New=0;
    Add=1;
    Get=2;
    Set=3;
    Rename=4;
    Test=5;
    Start=6;
    Stop=7;
    Restart=8;
    Enable=9;
    Disable=10;
    Remove=99;
    Delete=100;
    Default=50
}
$tableTemplate = @"
<table border='1'>
    <thead>
    <th>Feature</th><th>Cmdlets</th>
    </thead>
    <tbody>
    {0}
    </tobdy>
</table>
"@
<#
 # Sort cmdlets by verb according to the habits of users
#>
function Sort-CmdletsByVerb([System.Management.Automation.CommandInfo[]]$cmdlets){
    $cmdlets | ForEach-Object {
        $priority = $priorityTable[$_.Verb]
        if( $priority -eq $null ) { $priority = $priorityTable["Default"] }
        $_ = $_ | Add-Member "Priority" -Value $priority -MemberType NoteProperty -Force
    }
    $cmdlets | Sort-Object Priority
}

$htmlStr = new-object Text.StringBuilder
 Get-Command -Module "Hyper-V" | Group-Object noun | ForEach-Object {
    if($_.Count -gt 1)
    {
        $cmdlets= Sort-CmdletsByVerb -cmdlets  $_.Group  | select -ExpandProperty name
        #append first row
        $htmlStr.AppendFormat("<tr><td  rowspan='{0}'>{1}</td><td>{2}</td></tr>",
        $_.Count,$_.Name,$cmdlets[0]) | Out-Null
        #append remaining rows
        $cmdlets[1..$cmdlets.Length] | ForEach-Object {
        $htmlStr.AppendFormat("<tr><td>{0}</td></tr>",$_)} | Out-Null
    }
    else 
    {
        $htmlStr.AppendFormat("<tr><td>{0}</td><td>{1}</td></tr>",$_.Name , $_.Group[0].Name) | Out-Null
    }
}
$tableTemplate -f $htmlStr.ToString() | Out-File report.html
本文链接: https://www.pstips.net/export-cmdlets-as-html-format.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注