2017-07-17 21 views
3

私はPowerShellを使ってIPアドレスを設定する作業を自動化しようとしています。私のinterfaceindex番号を調べる必要があります。私が働いている何変数内の数値以外のすべてを取り除く方法は?

はこれです:

$x = (Get-NetAdapter | 
     Select-Object -Property InterfceName,InterfaceIndex | 
     Select-Object -First 1 | 
     Select-Object -Property Interfaceindex) | Out-String 

この意志出力:

 
InterfaceIndex 
-------------- 
      3 

問題、私が使用して数だけをつかむしよう:

$x.Trim.('[^0-9]') 

"InterfaceIndex"とアンダースコアが残ります。これにより、スクリプトの次の部分がエラーになります。これは、番号が必要なためです。

提案がありますか?

答えて

3

これはあなたの仕事を取得します:

(Get-NetAdapter | Select-Object -Property InterfceName,InterfaceIndex | Select-Object -First 1 | Select-Object -Property Interfaceindex).Interfaceindex 

実際にあなたがプロパティを選択するために、2回必要はありません。

(Get-NetAdapter |Select-Object -First 1| Select-Object -Property InterfceName,InterfaceIndex).Interfaceindex 
+1

あるいは、$ xをpowershellオブジェクトとして保存します。$ x = Get-NetAdapter | Select-Object -Propertyインターフェイス名、InterfaceIndex | Select-Object -First 1'を呼び出し、 '$ x.InterfaceIndex'として参照してください。 –

+1

これは何を実現するかわからない場合は、左にある – 4c74356b41

2
(Get-NetAdapter | select -f 1).Interfaceindex 

などのプロパティを選択するにはポイントをこのように行いません彼らはデフォルトでそこにいます。あなたがオブジェクトを保持する場合の操作を行います。画面にあなたは出力時に文字列へのキャストは暗黙的であるよう

(Get-NetAdapter | select -f 1 -ov 'variablename').Interfaceindex 

F =まず、OV = outvariable

$variablename.Interfaceindex 

あなたはOut-Stringは必要ありません。このデータをさらに処理しようとすると、powershellは必要に応じてintからstringへ、またはその逆のようにキャストできます。

2

あなたの即時の質問に答える:あなたがよく、によって変数から数字ではない、すべてを削除することができ、数ではないすべてのものを取り除く(あるいは、むしろ桁):

$x = $x -replace '\D' 

しかし、

$x = Get-NetAdapter | Select-Object -First 1 -Expand InterfaceIndex 

PowerShellコマンドレットは通常、あなたが正常にちょうど拡大出力として、その代わりに、文字列形式にこれらのオブジェクトをマングリングと余分な材料を切り取るのオブジェクトを生成します。より良いaproachは、単にあなたが最初の場所で削除したいものを追加しないことであろうpの値あなたが興味を持っている関節のプロパティ。

+0

を常にフィルタリングする必要があります。この場合、$ x = 2(または、何かがinterfaceindexになる)。そうではありません。 – 4c74356b41

+0

@ 4c74356b41 'Get-NetAdapter'はオブジェクト(実際にオブジェクトのリスト)を生成します。 'Select-Object'は、前記リストの最初のオブジェクトの1つのプロパティの値を抽出する。 –

関連する問題