2012-06-06 4 views
2

Я написал сценарий PowerShell для Server 2008 R2, чтобы проверить, установлены ли определенные роли и функции, и если они не будут их устанавливать (конечно, я сначала импортировал модуль ServerManager), то есть:Установка нескольких серверных ролей с помощью PowerShell

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 со всеми параметрами, которые мне нужны в одной строке, не создавая новую переменную для каждой проверки, потому что тогда мне понадобится только одна перезагрузка для всех отсутствующих ролей и функций?

Заранее спасибо.

ответ

2

попытка объявить:

[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. В вашем коде вам нужно удалить запятые, как я писал выше.

+0

Большое спасибо, это решение работало нормально. – IronGibbet

+0

@IronGibbet Всегда рад помочь. Чтобы избежать этих ошибок в будущем, посмотрите на miscrosoft msdn/technet, чтобы увидеть подписи командлета! –

Смежные вопросы