のWindows 2012 R2、Hyper-Vの2012 R2、SCVMM、PowerShellの...PowerShellパイプラインで、後続のLF文字を削除する方法は?
...私が使用して仮想マシンのリストを生成しています:
Get-SCVirtualMachine -All `
| Select-Object Name, ComputerName, Status, Memory, CPUCount, Location, VMHost `
| Sort-Object Name, ComputerName `
| Select Name, ComputerName, Status, @{e={[math]::Round($_.Memory/1024)}}, CPUCount, Location, VMHost `
| Export-CSV -Path "get-vms.csv" -NoTypeInformation
を...しかし、のいずれかのVMの場合、ComputerNameテキスト(「getaddrinfo failed」を出力するとき)には後続のLF(char 0x10)が含まれています。
エクスポートされたCSVファイルに問題のエントリは次のようになります。
B:\> type get-vms.csv
...
"client02","client02.blah.com","Running","12","4","C:\Storage\CSV02\client02","host02.blah.com"
"client03","getaddrinfo failed
","Running","2","1","C:\Storage\CSV03\client03","host03.blah.com"
...
と末尾の改行文字の証拠を示すために、私は、AAには、Get-vms.csvをコピーしてBBし、その後、メモ帳を使用しました|つまり直前に、句「選択」私はこの表現を使用しようとした
B:\>fc /b a.a b.b
Comparing files a.a and B.B
00012DE7: 0A 22
00012DE8: 22 2C
00012DEA: 2C 22
...
:その後、BB編集し、隠された目に見えない文字を削除し、保存された、として示しており、バイナリファイルを比較しましたExport-CSV:
01ちょうどの代わりに@{e={[string]::Replace($_.ComputerName,[char]0x0A,"l")}}
...:
ComputerName
...しかし、スクリプトは正常にすべてのVMのコンピュータ名を報告しなかった、つまり私が悪いの文字を取り除くために私の試みを使用し、 CSVファイルは次のようになります。
B:\> type get-vms.csv
...
"client02",,"Running","12","4","C:\Storage\CSV02\client02","host02.blah.com"
"client03",,"Running","2","1","C:\Storage\CSV03\client03","host03.blah.com"
...
... ie 2番目のフィールドのComputerNameアイテムが現在何も/ nullを効果的に報告していないことに注意してください。
言うまでもなく、私は頭を傷つけています...どのようにして不要なLF文字を取り除いても、ComputerNameテキストを表示できますか?
' [文字列] ::交換してください(。$ _コンピュータ名、[文字]は0x0A、 "L") ':このような何か l ")' – PetSerAl
これは 'Get-SCVirtualMachine'のバグのようです。そのようなstdoutにエラーメッセージを出力すべきではありません。 Microsoft Connect、またはSCVMMチームが使用するバグ報告システムに報告することができます。 –
こんにちはPetSerAl - 返事をいただきありがとうございます。残念ながら、エラーを生成します。ヌル値の式でメソッドを呼び出すことはできません。 – sdo