Как `Get-Command` может возвращать« команды », которые на самом деле не являются командами? - PullRequest
0 голосов
/ 28 марта 2019

'Get-Command' возвращает список всех доступных команд в сеансе powershell.

Следующий код оценивается как $ false, если передана строка, которая не является командой:

function f($x) {[bool](Get-Command $x -ErrorAction SilentlyContinue)}

И это так:

PS C:\Windows\system32> f ls
True
PS C:\Windows\system32> f alkdsjfasd
False

Итак, вы могли бы подумать, что следующий код вернет список команд, которые не являются командами - это пустой список:

Get-Command | Where-Object {[bool](Get-Command $_ -ErrorAction SilentlyContinue) -eq $false}

За исключением того, что это не так.На чистой виртуальной машине с Windows Server 2016 он возвращает следующее:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-IseSnippet                                     1.0.0.0    ISE
Function        Import-IseSnippet                                  1.0.0.0    ISE
Function        New-IseSnippet                                     1.0.0.0    ISE
Function        Start-AutologgerConfig                             1.0.0.0    EventTracingManagement
Cmdlet          Add-ClusteriSCSITargetServerRole                   2.0.0.0    IscsiTarget

Если я немного подожду и снова выполню ту же команду, возвращается гораздо более длинный список:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Add-RDServer                                       2.0.0.0    RemoteDesktop
Function        Add-RDSessionHost                                  2.0.0.0    RemoteDesktop
Function        Add-RDVirtualDesktopToCollection                   2.0.0.0    RemoteDesktop
Function        Disable-RDVirtualDesktopADMachineAccountReuse      2.0.0.0    RemoteDesktop
Function        Get-IseSnippet                                     1.0.0.0    ISE
...
Function        Test-RDVirtualDesktopADMachineAccountReuse         2.0.0.0    RemoteDesktop
Function        Update-RDVirtualDesktopCollection                  2.0.0.0    RemoteDesktop

Например, я проверил файлы в модуле RemoteDesktop и смог найти функции, которые «отсутствуют».

Что здесь происходит?Как Get-Command может возвращать «команды», которые не являются командами?

...