1

初心者の質問を許してください。私はpowershellが初めてで、非常に簡単なはずのことをしようとしています!

次の内容のテキストファイルがあります

DEVICE ID:   {E24CF707-F030-48DC-8E1A-59B96148BF52}
DEVICE NAME: All Devices (RAINBOW-SRV)
TYPE:        Drive pool
DEVICE ID:   {D16DC75F-8A8B-4AEC-A411-9B0BC58CBF16}
DEVICE NAME: HP 1
TYPE:        Drive
DEVICE ID:   {F2D2AB4A-1FBE-4158-AB62-6A94AE4392E2}
DEVICE NAME: RAINBOW-SRV
TYPE:        Machine
DEVICE ID:   {23AD5D42-00A8-496B-96E5-1F5CAA3F9E9D}
DEVICE NAME: Symantec Protection Network (RAINBOW-SRV)
TYPE:        Symantec Protection Network
RETURN VALUE: 1

DEVICE NAME: に続く文字列を配列に取得して、さらに下のコマンドに渡そうとしています。次のコードを試しましたが、Substring が有効なメソッドではないというエラーが表示されます。

非常に明白な何かが欠けているように感じますが、それを見ることはできません! どんな助けでも大歓迎です。

どうもありがとう

4

3 に答える 3

1

ファイルの内容を読み取り、「デバイス名:」で始まる行をフィルタリングします。各行を削除します(何も置き換えないでください)。「デバイス名:」

Get-Content devices.txt | Where-Object {$_ -like 'DEVICE NAME:* '} | Foreach-Object {$_ -repla
ce '^DEVICE NAME: '}

All Devices (RAINBOW-SRV)
HP 1
RAINBOW-SRV
Symantec Protection Network (RAINBOW-SRV)

更新:OTリクエストごとに、実行可能コマンドに値を渡す方法

Get-Content devices.txt | 
Where-Object {$_ -like 'DEVICE NAME:* '} | 
Foreach-Object {
    $device = $_ -replace '^DEVICE NAME: '
    app.exe "$device"
}
于 2012-05-22T13:47:01.690 に答える
1

別の解決策:

$list = @((get-content devices.txt) | where { $_ -match "DEVICE NAME:\s*(?<Device>.+)\s*" } | %{ $matches["Device"] })

$list
于 2012-05-22T14:10:15.483 に答える
0

さらに別の解決策:

Get-Content -Path .\devices.txt |
    Select-String 'DEVICE NAME: ' |
        Foreach-Object {
            $_.ToString() -replace '^DEVICE NAME: ','app.exe '
        }
于 2015-02-18T02:40:13.553 に答える