2012-06-28 47 views
1

我試圖將 $x = [System.Net.Dns]::GetHostAddresses($name)語句的結果寫入我的寫主機字符串,但遇到一些問題從獲取函數的結果到輸出中。輸出函數結果在PowerShell寫主機

這裏的相關代碼:

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)"""} 

目前它只是輸出字符串是,但是當它到達福子表達式似乎不正確執行邏輯,只輸出「$ x」的字面意思,那裏有我意圖是讓它在foreach-object語句中輸出當前obj的IP。

+0

'[System.Net.Dns] :: GetHostAddresses(<>)| Get-Member'不顯示任何'value'屬性?您可以簡單地嘗試在ISE /控制檯中首先運行這個 - [System.Net.Dns] :: GetHostAddresses(<>)。 –

+0

你是否打算這樣的 - [System.Net.Dns] :: GetHostAddresses(「<>」)[0] .ToString()in function fu()'? –

+0

將$ x改爲:'$ x = [System.Net.Dns] :: GetHostAddresses($ name)| select-object IPAddressToString -expandproperty IPAddressToString'? – LinksTune

回答

1

這是因爲你把$x放在大括號內{}

只是做Write-Host $x

+0

哇...我今天參加了很多會議lol,謝謝SpellingD – LinksTune

0

[System.Net.Dns]::GetHostAddresses(<<hostname>>) | Get-Member不顯示任何屬性?

您可以嘗試this函數。

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 

它你想要做什麼,$一個是數據的陣列。但你必須明白,以下功能給出了不同的結果

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 

拉斯一次給了好成績。 returnwrite-out都在函數的輸出中寫入數據。 Write-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