2016-11-14 14 views
-1

ドメインの承認されたdhcpサーバーをADに照会して取得したサーバーの一覧からdhcpスコープのオプション情報を抽出しようとしています。私は、リモートサーバーにnetsh dhcp server \\$servername scope $IP show optionvalueを渡すために、powershellのinvokeコマンドを使用しています。 $IP変数は、コマンドがそれを見たい方法を通過していません。 The command needs a valid Scope IP Address.エラーが発生します。Invoke-Commandを使用したPowershell DHCPスコープオプション抽出の抽出

最初にnetsh dhcp server \\$servername show scopeを実行してスコープIPアドレスを取得し、その出力からスコープipを抽出して、$IPに格納します。

IPを手動でスクリプトに入力するとスコープオプションが返されますが、変数を渡すと常にエラーが返されます。 PowerShellのコンソールでコマンドをテストしました。手動でIPを入力し、IP(文字列として)で変数を作成し、それをコマンドで使用することで動作します。スクリプトにIPを格納するときには、特別な文字も、空白も空白もありません。私はそれらを整えます。私はまた、[IPAddress]を使用してIPアドレスに文字列を変換しようとしましたが、無駄です。

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作品やスコープ情報を含まない行を削除します。ここでは

は、スコープ情報を収集して、スコープオプションを取得しようとするコードです。 2番目の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コンソールで動作します)。

私は依然として非常に初心者であり、私は自分のコードを投稿するのを嫌っていました。私は物事に非常にエレガントなソリューションでここに非常に多くを参照してください、比較すると、私のものは非常にclunkyようです。私はどこに間違っているのか見つけ出すことができます。しかし、私は学びたいと努力しており、私はこの週末のグーグル・グーグルでより良い結果を出して過ごしました。私は、2012年の前のサーバーで動作するスクリプトを見てきましたが、自分で作成することを本当に楽しんでいます。あなたが私に適切なウサギの穴を向けることができるならば、私は誰も "私のためにやる"ようにするつもりはない。私はそれを試してみてうれしいです。コード自体(外観、何かをする良い方法など)に関する提案も高く評価されています。

お詫び申し上げます。私は立ち往生し、何か助けに感謝します。あなたのInvoke-Commandコマンドでは、パラメータを渡していません

答えて

0

することは、それは次のようにする必要があります:

$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

ので、ありがとうございました。あなたは私に解決策を与えただけでなく、何かを学びました。非常に助けを感謝します。 –

関連する問題