Смешайте расширенные свойства из Select-объекта в PowerShell

#powershell #select #properties

Вопрос:

 Get-Module -Name Microsoft.PowerShell.Utility  

Имя версии типа модуля Экспортируемые команды


Манифест 3.1.0.0 Microsoft.PowerShell.Утилита {Добавить элемент, Добавить Тип, Очистить Переменную, Сравнить Объект…}

Я хочу расширить экспортируемые команды и напечатать имя каждой из них.

 Name ExportedCmdlets  Microsoft.PowerShell.Utility Add-Member  Microsoft.PowerShell.Utility Add-Type  Microsoft.Powershell.Utility Clear-Variable  Microsoft.Powershell.Utility Compare-Object  

Комментарии:

1. На самом деле это не ответ на проблему, которую вы пытаетесь решить в целом, но вы должны быть в состоянии получить этот список Get-Command -Module Microsoft.PowerShell.Utility .

Ответ №1:

Вы можете использовать вложенный цикл foreach для перебора экспортированных командлетов. Если вы посмотрите на тип объекта, которым является это свойство, вы увидите, что это словарь.

 Get-Module -Name Microsoft.PowerShell.Utility | ForEach-Object {  $_.ExportedCmdlets | Get-Member }  TypeName: System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Management.Automation.CmdletInfo, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]  

Поскольку ключи и имена в этом случае совпадают, вы можете использовать любой из них.

 Get-Module -Name Microsoft.PowerShell.Utility | ForEach-Object {  foreach($cmdlet in $_.ExportedCmdlets.keys){  [PSCustomObject]@{  Name = $_.Name  Cmdlet = $cmdlet  }  } }  

Вывод (усеченный)

 Name Cmdlet  ---- ------  Microsoft.PowerShell.Utility Add-Member  Microsoft.PowerShell.Utility Add-Type  Microsoft.PowerShell.Utility Clear-Variable  Microsoft.PowerShell.Utility Compare-Object