我正在使用 Hyper-V Server 2019。(这是一款免费Windows Server 2019 核心安装了 Hyper-V 角色的软件包。默认情况下,它完全基于文本 - 没有常规 Windows Server 软件包那样的 GUI 桌面,除非使用不属于此问题的第三方解决方案。)
许多关于在服务器上设置各种内容的说明都假设有图形工具可用。例如,文章为 Windows Admin Center 准备环境演示如何执行步骤 2:启用文件服务器角色使用其他版本的 Windows Server 中通常提供的图形工具。很少有说明包含 Powershell 的操作方法。
我已经学会了使用 Powershell“cmdlet”来做各种事情,但我卡在上面的第 2 步。我想我可以弄清楚,如何安装我需要的功能;但是,为了将来参考,我希望能够显示我感兴趣的项目。所以......
显示列表全部功能,我可以输入Get-WindowsFeature
。当然,这会显示一个长长的滚动列表!
从说明中的图表可以看出,我需要查看“文件和存储服务”下安装了什么。因此,我这样做:
Get-WindowsFeature | where {$_.InstallState -eq "Installed"}
(或者,另外Get-WindowsFeature | where Installed
:)
在 Powershell 5.1 中,返回结果如下:
我可以添加选择对象具有以下属性的管道子功能并得到这个:
但是,我真正想要的是像第一张图片那样,但仅限于“文件和存储服务”部分及其所有子功能,无论安装状态价值。
我见过一个-ExpandProperty
与数组类型结果一起使用的参数,但在 cmdlet 中的任何位置添加该参数只会给我一个错误,提示该参数不可用,或者子功能属性不可用。但是...
Get-WindowsFeature | Get-Member
显示属性如下:
SubFeatures Property string[] SubFeatures {get;}
我已经尝试使用以下参数-ExpandProperty
:
Get-WindowsFeature | where {$_.InstallState -eq "Installed"} | Select-Object -ExpandProperty DisplayName, Name, InstallState, SubFeatures
Get-WindowsFeature | where {$_.InstallState -eq "Installed"} | Select-Object DisplayName, Name, InstallState, -ExpandProperty SubFeatures
Get-WindowsFeature | where {$_.InstallState -eq "Installed"} | Select-Object DisplayName, Name, InstallState | Select-Object -ExpandProperty SubFeatures
注意:我使用的唯一原因是安装状态这样做是为了避免出现巨大的滚动效果。我尝试让子功能在深入研究如何获得一套房产之前“文件和存储服务”部分,因为我认为这将要求我得到子功能先弄清楚了。。。嗯。。。
另外,Powershell 7 有一个显示名称输出中的字段;但是,它是空白的。只有姓名和安装状态字段有内容。有趣的是,我可以通过指定它来获取信息:Get-WindowsFeature | where Installed | Select-Object DisplayName, Name, InstallState
,但它没有漂亮的小[X]
标记;)
无论哪种方式,我正在寻找什么如何获取特定部分(文件和存储服务这里)及其扩展SubFeatures
属性,这样我就可以使用 Powershell 轻松查看该部分安装的内容或可用的内容。
哦,要清楚的是,我确实尝试过Get-WindowsFeature -Name FileAndStorage-Services
,它只返回了那一项(没有它的子特征):
如果我使用简单的话,这是我的输出的前几行Get-WindowsFeature
,包括以下File and Storage Services
部分:
答案1
要SubFeatures
在查询时获取输出FileAndStorage-Services
,可以利用父特征的Name
属性。通过动态生成其关联的列表SubFeatures
,您可以确保它们也包含在列表中。
电源外壳
$FeatureName = "FileAndStorage-Services";
$subFeatures = (Get-WindowsFeature -Name $FeatureName | Select-Object SubFeatures).SubFeatures;
$subFeatures = $subFeatures+(Get-WindowsFeature -Name $subFeatures | Select-Object SubFeatures).SubFeatures;
$combineFeatures = "$($FeatureName)|$($subFeatures -join "|")";
Get-WindowsFeature | Where-Object {$_.Name -match $combineFeatures};
输出
Display Name Name Install State
------------ ---- -------------
[X] File and Storage Services FileAndStorage-Services Installed
[X] File and iSCSI Services File-Services Installed
[X] File Server FS-FileServer Installed
[ ] BranchCache for Network Files FS-BranchCache Available
[ ] Data Deduplication FS-Data-Deduplication Available
[X] DFS Namespaces FS-DFS-Namespace Installed
[X] DFS Replication FS-DFS-Replication Installed
[ ] File Server Resource Manager FS-Resource-Manager Available
[ ] File Server VSS Agent Service FS-VSS-Agent Available
[ ] iSCSI Target Server FS-iSCSITarget-Server Available
[ ] iSCSI Target Storage Provider (VDS and V... iSCSITarget-VSS-VDS Available
[ ] Server for NFS FS-NFS-Service Available
[ ] Work Folders FS-SyncShareService Available
[X] Storage Services Storage-Services Installed
[X] File Services Tools RSAT-File-Services Installed
更多详情
执行此操作将揭示的值SubFeatures
。在某些情况下,采用该Select *
方法可能特别有利,如下面的输出所示。
Get-WindowsFeature -Name $FeatureName | Select-Object *;
其余部分并不重要,因此我提供了支持资源如果您感兴趣或者需要深入挖掘,您可以探索该部分以进一步学习。
输出
Name : FileAndStorage-Services
DisplayName : File and Storage Services
Description : File and Storage Services includes services that are always installed, as well as functionality that you can install to help manage file servers and
storage.
Installed : True
InstallState : Installed
FeatureType : Role
Path : File and Storage Services
Depth : 1
DependsOn : {}
Parent :
ServerComponentDescriptor : ServerComponent_FileAndStorage_Services
SubFeatures : {File-Services, Storage-Services}
SystemService : {}
Notification : {}
BestPracticesModelId : Microsoft/Windows/FileServices
EventQuery : FileServer.Events.xml
PostConfigurationNeeded : False
AdditionalInfo : {MajorVersion, MinorVersion, NumericId, InstallName}
支持资源
答案2
灵感来自@VomitIT - Chunky Mess Style 的精彩答案,我编写了一个脚本,使用命令行参数以递归方式检索特征:
Param(
[String]$Name
)
# Get a feature and its subfeatures recursively and add to an array
function GetParentAndKids($feature)
{
$script:featureList += $feature
$subFeatures = Get-WindowsFeature -Name $feature | Select-Object -ExpandProperty SubFeatures
if ($subFeatures.count -eq 0) { return }
foreach ($subFeature in $subFeatures)
{
GetParentAndKids($subFeature)
}
}
$script:featureList = @();
GetParentAndKids($Name);
$script:featureList.foreach{Get-WindowsFeature -Name $PSItem}
以以下方式致电:
PS> .\scriptname -Name parent-feature-name
PS> .\scriptname parent-feature-name
例如:
和