Powershell 6 недостающих командлетов

559
root

Почему такие командлеты Test-NetConnectionбольше не доступны? Похоже, весь NetTCPIPмодуль не в v6. Есть ли список устаревших командлетов в Powershell Core?

Get-Module -n Microsoft.PowerShell.Management | select -exp ExportedCommands в v6 это примерно вдвое меньше, чем в v5.

2
Я не уверен насчет конкретного командлета, о котором вы спрашиваете, но да, в V6 гораздо меньше командлетов, чем в v5, и, вероятно, будет оставаться меньше в течение довольно долгого времени. Если вы явно не пишете * nix или кроссплатформенные совместимые сценарии, вы, вероятно, должны использовать v5. EBGreen 5 лет назад 0
PowerShell 6 - это многоплатформенная версия PowerShell, которая означает, что она поддерживает только те командлеты, которые были перенесены. Специфичные для Windows командлеты не были перенесены, поскольку их нельзя было бы использовать на этих других платформах. Ramhound 5 лет назад 1
Вы можете получить больше информации, задавая этот вопрос на http://stackoverflow.com/. Tripp Kinetics 5 лет назад 0
@TrippKinetics Маловероятно. Ответ заключается в том, что в V6 меньше командлетов, чем в версиях для Windows. Период. EBGreen 5 лет назад 0
@Ramhound Обратите внимание, что по крайней мере некоторые из командлетов `NetTCPIP` не принадлежат Windows. Если они не касаются интерфейсов ОС очень низкого уровня, их можно по крайней мере теоретически перенести. `Test-NetConnection` на самом деле должен быть довольно простым, это просто порт старой BSD-команды` ping` с типичными изменениями MS, отличающимися от других. Austin Hemmelgarn 5 лет назад 0
@AustinHemmelgarn - Комментарий был очень обобщенным. [В этом случае модуль PowerShell `NetTCPIP` существует только в Windows и не был перенесен в PowerShell 6.] (https://docs.microsoft.com/en-us/powershell/module/nettcpip/?view= win10-пс) Ramhound 5 лет назад 1
Я также укажу, что поскольку Powershell V6 является открытым исходным кодом, если вам не хватает того, что, по вашему мнению, должно быть, просто зайдите на github и начните писать код. EBGreen 5 лет назад 0

1 ответ на вопрос

1
Ben N

PowerShell 6 является кроссплатформенным, поэтому необходимо было переписать или удалить командлеты, основанные на собственных функциях. По всей видимости, Microsoft так и не удосужилась реализовать Test-NetConnectionдругие платформы. Командлеты, которые управляют только системами Windows (например, Storage Spaces), должны были быть удалены. Чтобы получить список всех отсутствующих командлетов, вы можете использовать PowerShell!

Сначала запустите это в PowerShell 5:

Get-Command | select Name, Source | Export-Csv .\cmds5.csv 

Затем снова запустите его в PowerShell 6 с другим выходным файлом:

Get-Command | select Name, Source | Export-Csv .\cmds6.csv 

Затем мы можем проанализировать файлы на наличие различий, используя любую версию PowerShell:

$cmd5 = Import-Csv .\cmds5.csv $cmd6 = Import-Csv .\cmds6.csv $gone = $cmd5 | ? { $n = $_.Name; ($cmd6 | ? { $_.Name -eq $n }) -eq $null } $new = $cmd6 | ? { $n = $_.Name; ($cmd5 | ? { $_.Name -eq $n }) -eq $null } 

Я проверил это на Windows 10 1703 x86 VM, которая должна иметь довольно свежие среды PowerShell. Я использовал v6.0.2 для PowerShell 6, самой последней стабильной версии. Из 1493 команд в PowerShell 5, 1139 были удалены в PowerShell 6. Я поместил их все в суть . Из 425 команд в PowerShell 6 71 являются новыми, но все, кроме трех, связаны с желаемой конфигурацией состояния. Те последние три являются Get-Uptime, Remove-Aliasи Remove-Service. Вы можете увидеть все новые команды в этой другой сущности .