Я использую это как способ, наконец, правильно использовать Stackoverflow!
Я пытаюсь запустить следующую строку как часть более крупного скрипта:
Install-WindowsFeature Web-Server -IncludeManagementTools
Что, очевидно, работает само по себе, но не тогда, когда я пытаюсь передать "-IncludeManagementTools" как часть переменной.
Я читаю в списке функций для установки как часть текстового файла, и некоторые из них имеют параметры параметров, такие как -IncludeManagementTools. Передача первой части «Веб-сервер» работает нормально, передача второй части - нет, если только не вводить текст непосредственно на консоль, то есть
$var="Web-Server"
Install-WindowsFeature $var -IncludeManagementTools
Полный текущий код приведен ниже; Я попытался разделить переменную, а также то, что ниже, и использовать операторы Switch вместо циклов if, но необязательный параметр всегда неправильно интерпретируется как имя устанавливаемой функции, например:
$currentline = "Web-Server -IncludeManagementTools"
Install-WindowsFeature $currentline.Split(" ")[0]
Работает, но
$currentline = "Web-Server -IncludeManagementTools"
Install-WindowsFeature $currentline.Split(" ")[0] $currentline.split(" ")[1]
Сбой. Любая помощь с благодарностью!
Полный код:
Param(
[Parameter(Mandatory=$true,Position=1)]
[string]$ConfigFilePath
)
$featurelist = Import-Csv $ConfigFilePath
# Install requested features
$featurelist | % {
# The install commands have some optional switches which could be in the input file
# to avoid an error reading in the Install-* commands, split on " " and feed into the command as seperate strings
If ( $_.feature -contains " " ) {
If ( $_.feature -eq "-IncludeManagementTools") {Install-WindowsFeature -Name "($_.feature.Split(" ")[0]) -IncludeManagementTools"}
Else {}
If ( $_.feature -eq "-IncludeAllSubFeature") { Install-WindowsFeature -Name "($_.feature.Split(" ")[0]) -IncludeAllSubfeature" }
Else {}
}
Else {
Install-WindowsFeature -Name $_.feature
}
}
$installed = @()
# Check installs work
$featurelist | % {
# The install commands have some optional switches which could be in the input file
# to avoid an error reading in the Get-* commands, remove anything that comes after a space (ie effectively removing optional switches)
$installed += Get-WindowsFeature -Name $_.feature.Split(" ")[0]
}
$missing = $installed | ? { $_.Installed -eq $false }
If (!($missing)) {
Write-Host "All requested features installed ok." -ForegroundColor Green -BackgroundColor Black
}
Else {
Write-Host "Some features requested weren't installed. They will be outputted below." -ForegroundColor Black -BackgroundColor Red
$missing
}