#powershell #dism
Вопрос:
Я запускаю следующее:
Get-WindowsOptionalFeature -Online -FeatureName TelnetClient | ConvertTo-Json -Depth 100
Он выдает следующий результат:
{
"DisplayName": "Telnet Client",
"Description": "Allows you to connect to other computers remotely.",
"RestartRequired": 1,
"CustomProperties": [
{
"Name": "Description",
"Value": "Telnet Client uses the Telnet protocol to connect to a remote Telnet server and run applications on that server.",
"Path": "ServerComponent"
},
{
"Name": "DisplayName",
"Value": "Telnet Client",
"Path": "ServerComponent"
},
{
"Name": "Id",
"Value": "44",
"Path": "ServerComponent"
},
{
"Name": "Type",
"Value": "Feature",
"Path": "ServerComponent"
},
{
"Name": "UniqueName",
"Value": "Telnet-Client",
"Path": "ServerComponent"
},
{
"Name": "Major",
"Value": "10",
"Path": "ServerComponent\Version"
},
{
"Name": "Minor",
"Value": "0",
"Path": "ServerComponent\Version"
},
{
"Name": "Name",
"Value": "TelnetClient",
"Path": "ServerComponent\Deploys\Update"
}
],
"FeatureName": "TelnetClient",
"State": 0,
"Path": null,
"Online": true,
"WinPath": null,
"SysDrivePath": null,
"RestartNeeded": false,
"LogPath": "C:\Windows\Logs\DISM\dism.log",
"ScratchDirectory": null,
"LogLevel": 2
}
Мой вопрос, в частности, заключается в том, в чем разница между «Требуется повторное запуск» и «Требуется повторное запуск»? Похоже, они оба касаются одной и той же темы. В чем именно разница между ними?
"RestartRequired"
на самом деле это перечисление ( Microsoft.Dism.Commands.RestartType
) со значениями:
Имя | Ценность |
---|---|
НЕТ | 0 |
Возможный | 1 |
Требуемый | 2 |
(Жаль, что я все еще использую PowerShell 5.1, в котором отсутствует -EnumsAsStrings
опция ConvertTo-Json
, добавленная в PowerShell 6 и 7.)
Комментарии:
1. Ну, казалось бы
RestartRequired
, это более детализировано (3 варианта), чемRestartNeeded
(2 варианта, правда или ложь)2. @MathiasR.Jessen На моей машине
Get-WindowsOptionalFeature -Online -FeatureName "Internet-Explorer-Optional-amd64" | ConvertTo-Json
возвращает"RestartRequired": 2
(2
=Required
), но также"RestartNeeded": false
. Эта точка данных, по-видимому, противоречит теории, котораяRestartRequired
является просто более детализированной версиейRestartNeeded
.3. На самом деле, это называется DismRestartType
4. @Theo Так это называется в C API. В API PowerShell это называется
Microsoft.Dism.Commands.RestartType
. Об этом свидетельствует следующее:Get-WindowsOptionalFeature -Online -FeatureName TelnetClient | Select { $_.RestartRequired.GetType().FullName }
Ответ №1:
Короткий ответ: О таких функциях, TelnetClient
которые возвращают [Microsoft.Dism.Commands.AdvancedFeatureObject]
:
RestartRequired
указывает, может ли потребоваться перезагрузка после установки или включения функцииRestartNeeded
используется для отображения того, ожидает ли в настоящее время перезапуск функции.
Длинная версия: AdvancedFeatureObject
Однако тип на самом деле никогда не получает это значение. Вместо этого свойство используется только Microsoft.Dism.Commands.ImageObject
тем, из которого оно возвращается Enable/Disable-WindowsOptionalFeature
. Например:
# I already have it installed:
Get-WindowsOptionalFeature -Online -FeatureName 'TelnetClient' | fl FeatureName,State,Restart*
FeatureName : TelnetClient
State : Enabled
RestartNeeded : False
RestartRequired : Possible
# I remove it, and save the output:
$result = Get-WindowsOptionalFeature -Online -FeatureName 'TelnetClient'|
Disable-WindowsOptionalFeature
# Returns an ImageObject
($result|gm).TypeName
Microsoft.Dism.Commands.ImageObject
# RestartNeeded is set here
$result
Path :
Online : True
RestartNeeded : True
# It does not get set on the main object though (only State=Disabled):
FeatureName : TelnetClient
State : Disabled
RestartRequired : Possible
RestartNeeded : False
Я думаю RestartNeeded
, что свойство присутствует только в AdvancedFeatureObject
связи с наследованием некоторого типа и на самом деле не является полезным свойством.