3

ステートメントの結果を $x = [System.Net.Dns]::GetHostAddresses($name)書き込みホスト文字列に書き込もうとしていますが、関数から出力に結果を取得する際に問題が発生します。

関連するコードは次のとおりです。

Import-Module activedirectory

function fu($name)
{
 $x = [System.Net.Dns]::GetHostAddresses($name).value
if ($x -ne $null){
    Write-Host{ $x } 
}
else{
    Write-Host{"Null"} 
}
}

Get-ADComputer -SearchBase 'OU=CorpServers,DC=corp,DC=com,DC=net' -Server      "corp.com.net" -Filter * -Properties * |ForEach-Object{write-host "add filter filterlist=""L2-Windows Servers"" srcaddr=any dstaddr=$(fu $_.Name) description=""$($_.Name)"""}

現在、文字列をそのまま出力するだけですが、fu部分式に到達すると、ロジックが適切に実行されないようで、文字通り「$ x」を出力するだけです。私の意図は、現在のobjのIPをforeachに出力することでした-オブジェクトステートメント。

4

3 に答える 3

1

$x中かっこを入れているからです{}

ただやるWrite-Host $x

于 2012-06-28T17:07:32.673 に答える
1

説明のためにコードを少し拡張しますが、これを試してください:

function fu($name)
{
  $res = $null
  $x = [System.Net.Dns]::GetHostAddresses($name)
  if ($x -ne $null)
  {
     $res = $x
  }
  return $res
}

$a = fu "localhost"
$a
$a.gettype().fullname

$a はデータの配列です。ただし、次の関数では異なる結果が得られることを理解する必要があります

function fu($name)
{
  $res = $null
  $x = [System.Net.Dns]::GetHostAddresses($name)
  if ($x -ne $null)
  {
     $res = $x
  }
  Write-Host $res
}

Clear-Host
$a = fu "localhost"
$a
$a | Get-Member

最後の 1 つは、再び良い結果をもたらします。どちらも関数の出力にデータを書き込みますreturn。ホストに書き込むだけです。write-outWrite-host

function fu($name)
{
  $res = $null
  $x = [System.Net.Dns]::GetHostAddresses($name)
  if ($x -ne $null)
  {
     $res = $x
  }
  Write-output $res
}

Clear-Host
$a = fu "localhost"
$a
$a | Get-Member
于 2012-06-28T19:07:03.363 に答える
0

[System.Net.Dns]::GetHostAddresses(<<hostname>>) | Get-Memberプロパティが表示されませんか?

代わりにこの機能を試すことができます。

于 2012-06-28T16:07:22.007 に答える