Я пытаюсь настроить Azure VM с Azure Automation DSC. Одним из ресурсов, которые я хочу установить, является DNS на клиентской рабочей станции с xDnsServerAddress
от xNetworking
.Как зарегистрировать результат выражения PowerShell в переменной для DSC?
Проблема заключается в том, что для псевдонима интерфейса и изменения псевдонимов интерфейса на виртуальных серверах Azure различаются в зависимости от развертывания (в основном виртуальные машины, похоже, получают либо Ethernet
, либо Ethernet 2
).
Я могу запросить имя интерфейса локально, используя следующее выражение командлет:
$Interface=Get-NetAdapter|Where Name -Like "Ethernet*"|Select-Object -First 1
$InterfaceAlias=$($Interface.Name)
я не знаю, однако, как использовать его внутри DSC.
Моя конфигурация DSC, как показано ниже (только соответствующая часть):
Configuration MyDscConfig
{
Import-DscResource -ModuleName xNetworking
# place-1
Node $AllNodes.where{$_.Role -eq "Workstation"}.NodeName
{
# place-2
xDnsServerAddress DnsServerAddressSetToDc1
{
Address = '10.0.0.4'
InterfaceAlias = $InterfaceAlias
AddressFamily = 'IPv4'
Validate = $true
}
}
}
Проблема заключается в том, что если поместить выражение командлетов либо в place-1
или place-2
работа компиляции завершается с:
Бегущая команда остановлена, потому что для параметра предпочтения «ErrorActionPreference» или общего параметра установлено значение «Стоп»: термин «Get-NetAdapter» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку.
Я предполагаю, что он пытается выполнить команду Get-NetAdapter
на выталкивающем сервере, но я могу неправильно интерпретировать сообщение об ошибке.
Как я могу зарегистрировать результат выражения cmdlet на конечном компьютере и зарегистрировать его в переменной $InterfaceAlias
для ресурса xDnsServerAddress
?
Йупа , [Я написал это] (https://github.com/PowerShell/xNetworking/commit/521166bef8373f72438d2f7643ead8e31daf61ce), но я бы назвал это отказом. – TravisEz13
Добавлено. Это лучший способ узнать об этом сейчас. Это решение работает с конфигурациями pull и push. По сути, это очень похоже на решение, которое вы (@techraf) придумали. Поскольку DSC должен быть декларативным языком, лучше отделить ресурс настройки DNS-сервера для сетевого адаптера и поиска сетевого адаптера. Это решение удерживает императивный язык от декларативного. Надеемся, в долгосрочной перспективе команда DSC может найти лучший способ запросить значение и использовать его в качестве параметра позже в конфигурации. – TravisEz13
Выполняет ли запрос состояния и выполнение декларативной операции на основе этого состояния, превращая парадигму в императивную? Это не риторический вопрос, мне действительно интересно. Не является ли декларативно-относительным возможным, помимо декларативно-абсолютного? – techraf