0
get-command | where-object { $_.commandtype -eq "cmdlet" } | sort-object -property name | select-object -property name | where-object { $_.name -match "^get" } | out-file "getcommands.txt"

$content = get-content "getcommands.txt"

$content | Foreach-Object { $_.TrimEnd() } | where { $_ -match "\w" } | Out-File "getcommands.txt" -encoding Ascii

compare-object -referenceobject $(Get-Content "oldcommands.txt") -differenceobject $(Get-Content "getcommands.txt") -includeequal

此代码检索所有以“get”开头的 cmdlet,并将它们与文本文件中的列表进行比较。它还消除了超额收益和空白,因此比较确实有效。

一切正常,但很难阅读。我只是在学习如何编写 PowerShell 脚本,所以我不确定如何使用更优雅的代码完成相同的任务。

我打赌有一种方法可以在没有所有管道的情况下做到这一点。如果没有一大堆额外的空格和返回,我也无法从第一行代码中获取输出以输出到文本文件。

4

3 回答 3

1

我认为这也是如此:

get-command -CommandType "cmdlet" -name get*  | SELECT -expand name | 
out-file "getcommands.txt" -encoding Ascii

compare-object -referenceobject (Get-Content "oldcommands.txt") -differenceobject (Get-Content "getcommands.txt") -includeequal
于 2013-04-11T19:05:05.133 回答
0

如果你有 V3,这似乎有点快:

(get-command -CommandType "cmdlet" -name get*).name |
set-content getcommands.txt
于 2013-04-11T23:37:12.140 回答
-1

使用 过滤源中的 cmdlet 列表-verb。最佳做法是在管道的左侧(最靠近数据源)尽可能多地进行过滤

get-command -verb get |where-object{$_.CommandType -eq "Cmdlet"}|select-object -expandpropertyproperty name|out-file getcommands.txt -encoding ascii
compare-object -referenceobject $(Get-Content "oldcommands.txt") -differenceobject $(Get-Content "getcommands.txt") -includeequal

应该有一种方法Where-Object可以消除-CommandType参数 forget-command但我不能让它在这里工作。我希望以下其中一项能够工作,但也不能:

get-command -verb get -CommandType Cmdlet
get-command -verb get -CommandType [system.management.automation.commandtypes]::Cmdlet
于 2013-04-11T19:35:57.930 回答