问题描述
我运行以下内容:
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",{
"Name": "Id","Value": "44",{
"Name": "Type","Value": "Feature",{
"Name": "UniqueName","Value": "Telnet-Client",{
"Name": "Major","Value": "10","Path": "ServerComponent\\Version"
},{
"Name": "Minor","Value": "0",{
"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
选项。)
解决方法
简短回答:关于像 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
上,这是由于某种类型继承,实际上并不是一个有用的属性。