2

PowerShell からNETSHを使用しようとしています。オブジェクトなど、このコマンドの結果を確認したいのですが、netshは文字列を返します。

netsh wlan show hostednetwork | Get-Member
   TypeName: System.String
...

私のスクリプトは、むしろローカライズされたシステムで動作する必要があり、文字列をオブジェクトに直接解析するために-matchを使用することはできません。

どうすれば私の悩みを解決できますか?

4

3 に答える 3

4
$netshResult = Invoke-Command -Computername localhost {netsh int tcp show global}
$result = @{}
$netshObject = New-Object psobject -Property @{
    ReceiveSideScalingState = $Null
    ChimneyOffloadState = $Null
    NetDMAState = $Null
} 
$netshResult = $netshResult | Select-String : #break into chunks if colon  only
$i = 0
while($i -lt $netshResult.Length){
    $line = $netshResult[$i]
    $line = $line -split(":")
    $line[0] = $line[0].trim()
    $line[1] = $line[1].trim()
    $result.$($line[0]) = $($line[1])
    $i++
    }
$netshObject.ReceiveSideScalingState = $result.'Receive-Side Scaling State'
$netshObject.ChimneyOffloadState = $result.'Chimney Offload State'
$netshObject.NetDMAState = $result.'NetDMA State'
于 2016-03-01T02:47:02.157 に答える
2

いくつかの選択肢がありますが、どれも良いものではありません。

netsh1)出力を に読み込み、string[]カスタム レコード パーサーを使用して独自のオブジェクトを作成します。つまり、さまざまなロケールで出力を見て、たとえばHosted newtork settingsが常に最初のヘッダーであり、その後に一連の-文字が続くかどうかを調べます。その場合は、配列の次の要素がMode等々であると仮定します。これは非常にエラーが発生しやすいですが、通常、MS コマンド ライン ツールはメッセージの順序ではなく、メッセージのみを変換します。

2) .Net API で同じ情報を探します。たくさんSystem.Net.NetworkInformationの接続物が含まれています。必要な情報があるかどうかはわかりませんが、それは始まりです。

3) 前のオプションに失敗した場合は、P/Invokeを使用してネイティブ Win32 APIを呼び出します。これは大変な作業なので、独自のラッパー ライブラリを作成する前に、既存のラッパー ライブラリを探してください。

于 2014-11-15T08:22:20.110 に答える