我为Server 2008 R2编写了一个PowerShell脚本,检查是否安装了某些角色和功能,以及是否安装它们(当然我最初导入了ServerManager模块),即:
if ((Get-WindowsFeature AS-NET-Framework).Installed -eq 0)
{$InstallFeatures += "AS-NET-Framework,"
Write-Host "AS-NET-Framework will be added"}
if ((Get-WindowsFeature GPMC).Installed -eq 0)
{$InstallFeatures += "GPMC,"
Write-Host "GPMC will be added"}
但是当我调用
时Add-WindowsFeature $InstallFeatures
它给出了一个错误,即找不到该名称。 不知何故,PS不接受逗号作为字符串中的分隔符。
但是如果你输入
Add-WindowsFeature AS-NET-Framwork,GPMC
在控制台中它可以正常工作。
有没有办法在一行中使用我需要的所有参数调用Add-WindowsFeature
而不为每个检查创建一个新变量,因为那样我只需要重新启动所有缺少的角色和功能?
提前致谢。
答案 0 :(得分:3)
尝试声明:
[string[]]$InstallFeatures = @()
在您的代码之前。
if ((Get-WindowsFeature AS-NET-Framework).Installed -eq 0)
{$InstallFeatures += "AS-NET-Framework"
Write-Host "AS-NET-Framework will be added"}
if ((Get-WindowsFeature GPMC).Installed -eq 0)
{$InstallFeatures += "GPMC"
Write-Host "GPMC will be added"}
Get-WindowsFeature
的签名是:
Get-WindowsFeature [[-Name] <string[]>] [-logPath <string>] [<CommonParameters>]
参数名称接受string array
而不是string
。
在你的代码中,你需要删除我上面写的逗号。