PowerShell脚本提供

时间:2018-03-19 17:46:53

标签: powershell

安装完应用程序后,我们需要计算GAC .dll文件,以便创建可用的脚本。然而,虽然我觉得它(对我来说)没问题但我没有人去复习。您想推荐哪些改进措施?

$path = "C:\Windows\Microsoft.NET\assembly\GAC_MSIL"
$app = Read-Host -Prompt 'Enter BizTalk App Name example (Order)'
Get-ChildItem -Path $path -Recurse -include "*$app*.dll" | Measure-Object | %{$_.Count} | Write-Host 

先谢谢,我在这个网站上学到了很多东西。

1 个答案:

答案 0 :(得分:1)

这是一个3行剧本,它非常好。但如果你想要反馈,我接受的两件事就是:

  1. 在脚本中使用%,它是别名,一般的PowerShell建议是避免在脚本中使用别名。将完整的cmdlet名称ForEach-Object放在一起可以让那些没有记住别名的人更清楚。 PowerShell社区StyleGuide在命名约定页面中提到:

  2. 使用Write-Host - 只有在您需要时才能使用它。 PowerShell输出应该是管道而不是主机,除非你肯定需要主机输出。它使您的脚本更具组合性 - 如果它使用Write-Host进行输出,则无法从一个脚本传输到另一个脚本。

    有很多关于此的内容,有更多的讨论,例如:

  3. 更小的变化:

    • 添加评论以说出它的作用或原因。
    • "string" - 双引号中的字符串可以扩展变量和子表达式。单引号中的字符串不能。由于您的路径中没有变量,因此请将其放在单引号中,并告诉读取脚本的任何人不应查找或期望字符串中的任何变量或子表达式。
    • -Path $path - -Path参数可以处理通配符。您的路径是没有通配符的文字目录名称,使用-LiteralPath $path作为避免任何意外通配符的方法(例如文件名中的[]被视为通配符)。

    那就是

    # Count the Global Assembly Cache DLL files for a given app name
    
    $path = 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL'
    $app = Read-Host -Prompt 'Enter BizTalk App Name example (Order)'
    
    Get-ChildItem -LiteralPath $path -Recurse -Include "*$app*.dll" |
        Measure-Object |
        ForEach-Object -Property Count