ConvertFrom-String
Mengekstrak dan mengurai properti terstruktur dari konten string.
Sintaks
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Deskripsi
cmdlet ConvertFrom-String
mengekstrak dan mengurai properti terstruktur dari konten string. Cmdlet ini menghasilkan objek dengan mengurai teks dari aliran teks tradisional. Untuk setiap string dalam alur, cmdlet membagi input dengan pemisah atau ekspresi penguraian, lalu menetapkan nama properti ke masing-masing elemen pemisah yang dihasilkan. Anda dapat memberikan nama properti ini; jika tidak, mereka secara otomatis dibuat untuk Anda.
Set parameter default cmdlet, ByDelimiter, memisahkan persis pada pemisah ekspresi reguler. Ini tidak melakukan pencocokan kutipan atau pemisah melarikan diri seperti yang dilakukan cmdlet Import-Csv
.
Kumpulan parameter alternatif cmdlet, TemplateParsing, menghasilkan elemen dari grup yang ditangkap oleh ekspresi reguler. Untuk informasi selengkapnya tentang ekspresi reguler, lihat about_Regular_Expressions.
Cmdlet ini mendukung dua mode: penguraian berbatas dasar, dan penguraian berbasis contoh yang dibuat secara otomatis.
Penguraian yang dibatasi, secara default, membagi input pada spasi kosong, dan menetapkan nama properti ke grup yang dihasilkan.
Anda dapat menyesuaikan pemisah dengan membajak hasil ConvertFrom-String
menjadi salah satu cmdlet Format-*
, atau Anda dapat menggunakan parameter Pemisah.
Cmdlet ini juga mendukung penguraian berbasis contoh yang dihasilkan secara otomatis berdasarkan FlashExtract, pekerjaan penelitian oleh Microsoft Research.
Contoh
Contoh 1: Membuat objek dengan nama properti default
"Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
Perintah ini menghasilkan objek dengan nama properti default, P1 dan P2.
Contoh 1A: Mengenal objek yang dihasilkan
Perintah ini menghasilkan satu objek dengan properti P1, P2; kedua properti tersebut berjenis String, secara default.
"Hello World" | ConvertFrom-String | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
P1 NoteProperty string P1=Hello
P2 NoteProperty string P2=World
Contoh 2: Membuat objek dengan nama properti default menggunakan pemisah
Perintah ini menghasilkan objek dengan domain dan nama pengguna menggunakan garis miring terbalik (\
) sebagai pemisah. Karakter garis miring terbalik harus diloloskan dengan garis miring terbalik lain saat menggunakan ekspresi reguler.
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"
P1 P2
-- --
Contoso Administrator
Contoh 3: Hasilkan objek yang berisi dua properti bernama
Contoh berikut membuat objek dari entri file host Windows.
$content = Get-Content C:\Windows\System32\drivers\etc\hosts
$content = $content -match "^[^#]"
$content | ConvertFrom-String -PropertyNames IP, Server
IP Server
-- ------
192.168.7.10 W2012R2
192.168.7.20 W2016
192.168.7.101 WIN8
192.168.7.102 WIN10
Cmdlet Get-Content
menyimpan konten file host Windows di $content
. Perintah kedua menghapus komentar apa pun di awal file host menggunakan ekspresi reguler yang cocok dengan baris apa pun yang tidak dimulai dengan (#
). Perintah terakhir mengonversi teks yang tersisa menjadi objek dengan Server dan properti IP.
Contoh 4: Gunakan ekspresi sebagai nilai parameter TemplateContent, simpan hasilnya dalam variabel.
Perintah ini menggunakan ekspresi sebagai nilai parameter TemplateContent. Ekspresi disimpan dalam variabel untuk kesederhanaan. Windows PowerShell memahami sekarang bahwa string yang digunakan pada alur untuk ConvertFrom-String
memiliki tiga properti:
- Nama
- telepon
- usia
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-Output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
Setiap baris dalam input dievaluasi oleh sampel yang cocok. Jika baris cocok dengan contoh yang diberikan dalam pola, nilai diekstrak dan diteruskan ke variabel output.
Data sampel, $template
, menyediakan dua format telepon yang berbeda:
425-123-6789
(206) 987-4321
Data sampel juga menyediakan dua format usia yang berbeda:
6
12
Ini menyiratkan bahwa ponsel seperti (206) 987 4321
tidak akan dikenali, karena tidak ada data sampel yang cocok dengan pola tersebut karena tidak ada tanda hubung.
Contoh 5: Menentukan jenis data ke properti yang dihasilkan
Ini adalah contoh yang sama dengan Contoh 4, di atas. Perbedaannya adalah bahwa string pola menyertakan jenis data untuk setiap properti yang diinginkan.
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-Output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
$PersonalData | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
age NoteProperty int age=6
Name NoteProperty string Name=Phoebe Cat
phone NoteProperty string phone=425-123-6789
Cmdlet Get-Member
digunakan untuk menunjukkan bahwa properti usia adalah bilangan bulat.
Parameter
-Delimiter
Menentukan ekspresi reguler yang mengidentifikasi batas antar elemen. Elemen yang dibuat oleh pemisahan menjadi properti dalam objek yang dihasilkan. Pemisah pada akhirnya digunakan dalam panggilan ke metode Pisahkan dari jenis [System.Text.RegularExpressions.RegularExpression]
.
Jenis: | String |
Alias: | DEL |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-IncludeExtent
Menunjukkan bahwa cmdlet ini menyertakan properti teks tingkat yang dihapus secara default.
Jenis: | SwitchParameter |
Alias: | IE |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-InputObject
Menentukan string yang diterima dari alur, atau variabel yang berisi objek string.
Jenis: | String |
Position: | 0 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-PropertyNames
Menentukan array nama properti untuk menetapkan nilai terpisah dalam objek yang dihasilkan. Setiap baris teks yang Anda pisahkan atau urai menghasilkan elemen yang mewakili nilai properti. Jika elemen adalah hasil dari grup pengambilan, dan grup penangkapan tersebut diberi nama (misalnya, (?<name>)
atau (?'name')
), maka nama grup tangkapan tersebut ditetapkan ke properti .
Jika Anda menyediakan elemen apa pun dalam array PropertyName, nama tersebut ditetapkan ke properti yang belum diberi nama.
Jika Anda menyediakan lebih banyak nama properti daripada bidang, PowerShell mengabaikan nama properti tambahan. Jika Anda tidak menentukan nama properti yang cukup untuk memberi nama semua bidang, PowerShell secara otomatis menetapkan nama properti numerik ke properti apa pun yang tidak bernama: P1, P2, dll.
Jenis: | String[] |
Alias: | PN |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-TemplateContent
Menentukan ekspresi, atau ekspresi yang disimpan sebagai variabel, yang menjelaskan properti tempat cmdlet ini menetapkan string. Sintaksis spesifikasi bidang templat adalah sebagai berikut: {[optional-typecast]<name>:<example-value>}
.
Jenis: | String[] |
Alias: | TC |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-TemplateFile
Menentukan file, sebagai array, yang berisi templat untuk penguraian string yang diinginkan. Dalam file templat, properti dan nilainya diapit dalam tanda kurung siku, seperti yang ditunjukkan di bawah ini. Jika properti, seperti properti Nama dan properti lain terkait, muncul beberapa kali, Anda dapat menambahkan tanda bintang (*
) untuk menunjukkan bahwa ini menghasilkan beberapa rekaman. Ini menghindari mengekstrak beberapa properti ke dalam satu rekaman.
{Name*:D avid Chew} {City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}
Jenis: | String[] |
Alias: | TF |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-UpdateTemplate
Menunjukkan bahwa cmdlet ini menyimpan hasil algoritma pembelajaran ke dalam komentar dalam file templat. Hal ini membuat proses pembelajaran algoritma lebih cepat. Untuk menggunakan parameter ini, Anda juga harus menentukan file templat dengan parameter TemplateFile.
Jenis: | SwitchParameter |
Alias: | UT |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
Output
Catatan
Windows PowerShell menyertakan alias berikut untuk ConvertFrom-String
:
CFS