PowerShell, если ошибка оператора - PullRequest
0 голосов
/ 29 мая 2019

Мне нужен еще один набор глаз, потому что я уверен, что это просто, но это пинает мою задницу прямо сейчас. Я пишу сценарий для установки ролей / функций Windows на компьютерах с Server 2008 и Server 2012.

Я знаю, что 2008 использует Add-WindowsFeature, тогда как 2012 использует Install-WindowsFeature. Поэтому моя цель - взглянуть на ОС и, если это 2008 год, создать переменную с именем $Install со значением Add-WindowsFeature, а если это не 2008, присвоить ей значение Install-WindowsFeature.

Вот что у меня сейчас:

$OS = (Get-WmiObject Win32_OperatingSystem).Name

if ($OS -like '2008') {
    $Install = 'Add-WindowsFeature'
} else {
    $Install = 'Install-WindowsFeature'
}

В настоящее время, когда я вызываю переменную $OS, я получаю возвращаемое значение:

Microsoft Windows Server 2008 R2 Standard |C:\Windows|\Device\Harddisk0\Partition2

Но когда я вызываю переменную $Install, я получаю возвращаемое значение:

Install-WindowsFeature

Я также пробовал -contains вместо -like, но получаю тот же результат. Я также пытался устранить пробелы перед фигурными скобками, но все равно без изменений. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 29 мая 2019

Оператор -like не является сравнением регулярного выражения. Если у вас нет подстановочных знаков, совпадение -like совпадает со сравнением равенства.

Вам необходимо включить символы подстановки, например:

if ($OS -like '*2008*') {

сделать проверку содержимого, как это:

if ($OS.Contains('2008')) {

или используйте совпадение с регулярным выражением, например:

if ($OS -match '2008') {

Документация здесь:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators

1 голос
/ 29 мая 2019

В качестве альтернативы, командлет Enable-WindowsOptionalFeature должен быть доступен на машинах 2008 года и более.Вы должны иметь возможность использовать это для установки любой функции, которая вам нужна, независимо от ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...