2016-11-14 1 views
-1

Я пытаюсь извлечь информацию о опции области dhcp из списка серверов, список, полученный путем запроса AD для разрешенных серверов dhcp в домене. Я использую команду invoke-command powershell для передачи netsh dhcp server \\$servername scope $IP show optionvalue на удаленный сервер. Переменная $IP не передает способ, которым команда хочет ее видеть. Он выдает ошибку The command needs a valid Scope IP Address..Пакет Powershell Параметры извлечения области действия DHCP с использованием Invoke-Command

Я получаю IP-адрес области, сначала запустив netsh dhcp server \\$servername show scope и извлекая область видимости с этого выхода, сохраняя ее в $IP.

Я могу ввести IP вручную в скрипт, и он возвращает параметры области, но передача в переменной всегда возвращает ошибку. Я протестировал эту команду на консоли powershell, как вручную, набрав IP-адрес, так и создав переменную с IP-адресом (как строку) и используя ее в команде, которая также работает. Нет специальных символов, которые я могу сказать, или пробелов, когда я храню IP-адрес в скрипте. Я обрезаю их. Я также попытался преобразовать строку в IP-адрес, используя [IPAddress], но безрезультатно.

Вот код, который собирает информацию области действия, а затем пытается получить параметры области:

foreach ($n in $name) { 
$n 
$showScopes = Invoke-command -computername $n -ScriptBlock {netsh dhcp server \\$n show scope} 
$formatScopeInfo = $showScopes | ? {$_.Trim() -ne "" -and ($_.Contains("Disabled") -or $_.Contains("Active"))} 

foreach ($en in $formatScopeInfo) { 
    $scopeIps = $en.Split("-") 
    $IP = [IPAddress]$scopeIps[0].Trim() 
    $IP.IPAddressToString 
    Invoke-Command -ComputerName $n -ScriptBlock {netsh dhcp server \\$n scope $IP.IPAddressToString show optionvalue} 
} 

Первые Foreach работа и удаляет строки, которые не содержат область видимости информации. Второй foreach частично работает, он лишает IP. Первоначально я просто сохранил его как строку, $IP = $scopeIps[0].Trim(), но это не сработало. Я пробовал несколько вещей. Я попытался преобразовать октеты в целые числа и присоединить их к «.», Я попытался сохранить всю команду как строку и передать ее в Invoke-Command. Как так:

$command = "netsh dhcp server \\$n scope $IP show optionvalue" 
Invoke-Command -ComputerName $n -ScriptBlock {$command} 

Конечная цель состоит в том, чтобы иметь возможность извлекать любые сконфигурированные параметры области, где они могут быть настроены (сервер, резервирование ... и т.д.). Я боюсь, что добрался до того момента, когда я настолько сконцентрирован на том, что, на мой взгляд, является проблемой, что я могу пропустить что-то простое и/или важное в другом месте. Мое мнение таково, что команда хочет увидеть фактический IP-адрес, но мои попытки передать переменную таким образом потерпели неудачу (и она работает в консоли powershell при сохранении в виде строки).

Справедливое раскрытие, я по-прежнему очень новичок, и я не хотел публиковать свой код. Я вижу так много здесь с невероятно элегантными решениями вещей, и, для сравнения, мои вещи кажутся чрезвычайно неуклюжими. Мне никогда не приходилось публиковать сообщения, так как большинство раз я могу найти/выяснить, где я ошибся. Но я стараюсь учиться, и я провел большую часть этого выходного дня без результатов. Я видел сценарий там, который работает для серверов до 2012 года, но мне очень нравится писать свои собственные. Я не хочу, чтобы кто-нибудь «делал это для меня», если вы можете указать мне подходящую кроличью нору; Я рад спуститься вниз. Любые предложения по самому коду (внешний вид, лучший способ сделать что-то ... и т. Д.) Также оценены.

Извинения за многословие. Я застрял и ценю любую помощь.

ответ

0

В вашей Invoke-команды вы не передавая параметр, это должно быть так:

$showScopes = Invoke-command -computername $n -ScriptBlock { 
param($n) 
netsh dhcp server \\$n show scope 
} -argumentlist $n 

и

Invoke-Command -ComputerName $n -ScriptBlock { 
param($n,$IP) 
netsh dhcp server \\$n scope $IP.IPAddressToString show optionvalue 
} -argumentlist $n,$IP 
+1

Спасибо вам большое. Ты не только дал мне решение, но и кое-что узнал. Очень ценю помощь. –

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