1

我运行以下命令:

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
}

我的问题特别是关于“RestartNeeded”和“RestartRequired”之间的区别是什么?他们似乎都在谈论同一个话题。它们之间究竟有什么区别?

"RestartRequired"实际上是一个Microsoft.Dism.Commands.RestartType具有值的枚举 ( ):

姓名 价值
0
可能的 1
必需的 2

(很遗憾,我仍在使用 PowerShell 5.1,它缺少在 PowerShell 6 和 7 中添加的-EnumsAsStrings选项。)ConvertTo-Json

4

1 回答 1

3

简短回答:关于TelnetClient返回 a之类的功能[Microsoft.Dism.Commands.AdvancedFeatureObject]

  • RestartRequired表示安装或启用该功能后是否需要重新启动
  • RestartNeeded用于显示该功能当前是否正在等待重新启动。

长版本:AdvancedFeatureObject类型实际上从未设置此值。相反,该属性仅用于Microsoft.Dism.Commands.ImageObjectEnable/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在于某些类型继承中,实际上并不是一个有用的属性。

于 2021-05-14T15:54:07.710 回答