Ответ 1
Командлет PowerShell - это скомпилированный фрагмент кода .NET, более точно один класс, если я не ошибаюсь. Командлеты являются "родными" командами на земле PowerShell, способными обрабатывать ввод и вывод объектов, а также, как правило, хорошо работать с конвейером (объектно-ориентированным).
Командлеты не имеют прямого представления в файловой системе, поскольку они не являются программами или подобными. Они существуют исключительно в PowerShell. Командлет Get-Command
можно использовать для запроса всех доступных командлетов, функций и т.д.
Вы можете написать cmdlets с языком .NET, таким как С#. С PowerShell v2 существует также возможность создания так называемых расширенных функций, которые ведут себя аналогично командлетам и имеют сопоставимые возможности, но интерпретируются как код PowerShell вместо скомпилированных классов. Это может привести к непредвиденным затратам времени выполнения.