更多详情

更多详情

我正在使用 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 中,返回结果如下:

Get-WindowsFeature:已安装项目列表

我可以添加选择对象具有以下属性的管道子功能并得到这个:

Get-WindowsFeature:带有子功能的已安装项目列表

但是,我真正想要的是像第一张图片那样,但仅限于“文件和存储服务”部分及其所有子功能,无论安装状态价值。

我见过一个-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 仅显示一项服务


如果我使用简单的话,这是我的输出的前几行Get-WindowsFeature,包括以下File and Storage Services部分:

Get-WindowsFeature 输出的前几行

答案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

例如:

RSAT 功能及其所有子功能的完整显示

全面展示 FileAndStorage-Services 及其所有子功能

相关内容