1
function getinfo {
    $strComputer = "localhost"
    $colItems = GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -comp $strComputer -filter "IpEnabled = TRUE"
    $Items1 = $colItems | Select DHCPServer, Caption, DNSHostName, IPAddress
    $Items2 = $colItems | Select ServiceName, MacAddress, IPSubnet, InterfaceIndex
}
$objects = (New-Object PSObject |
               add-member -pass NoteProperty "DHCP Server" $Items1.DHCPServer |
               add-member -pass NoteProperty "IP Address" $Items1.IPAddress | 
               add-member -passthru NoteProperty "Mac Address" $Items2.MacAddress | 
               add-member -passthru NoteProperty "IP Subnet" $Items2.IPSubnet
                )
$objects | ConvertTo-Json

-pass&-passthruキーについて混乱しています。違いは何ですか?-passthruまた、 for を使用すると何も入力されないのはなぜ$Items1ですか?

4

1 に答える 1

1

問題は-passまたはではありません-passthru。問題は、関数内で作成された変数は、通常、その関数がまだ実行されている間のみ使用できることです。about_Scopesのヘルプから:

Windows PowerShell は、変数、エイリアス、関数、および Windows PowerShell ドライブ (PSDrive) へのアクセスを、読み取りおよび変更できる場所を制限することによって保護します。

dot-source を使用して関数を呼び出すと、変数をコマンドで使用できるように保つことができますNew-Object

function getinfo {
    $strComputer = "localhost"
    $colItems = GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -comp $strComputer -filter "IpEnabled = TRUE"
    $Items1 = $colItems | Select DHCPServer, Caption, DNSHostName, IPAddress
    $Items2 = $colItems | Select ServiceName, MacAddress, IPSubnet, InterfaceIndex
}
. getinfo
$objects = (New-Object PSObject |
               add-member -pass NoteProperty "DHCP Server" $Items1.DHCPServer |
               add-member -pass NoteProperty "IP Address" $Items1.IPAddress | 
               add-member -passthru NoteProperty "Mac Address" $Items2.MacAddress | 
               add-member -passthru NoteProperty "IP Subnet" $Items2.IPSubnet
                )
$objects | ConvertTo-Json
于 2015-12-23T21:49:25.517 に答える