- Mentafsir atribut EFS dan OneDrive dengan menukar integer kepada System.IO.FileAttributes dan menyemak bendera.
- Gunakan Get-ItemProperty dalam FileSystem dan Registry; elakkan kejutan jauh dengan Out-String atau membaca nilai tertentu.
- Melengkapkan EFS dengan CMS (Protect/Unprotect-CmsMessage) untuk penyulitan kandungan mudah alih.
Sekiranya anda bekerja dengan Windows y PowerShell, lambat laun anda perlu memeriksa atribut fail dan folder yang disulitkan, sama ada melalui Penyulitan EFS asli, oleh fail yang dilindungi melalui CMS atau oleh tingkah laku OneDrive Files On-Demand yang menambah bendera khas pada sistem fail. Dalam semua senario ini, Dapatkan-ItemProperty Ia adalah sepana yang membolehkan anda membaca sifat dengan tepat dan, sebagai tambahan, bergerak bebas melalui Pejabat Pendaftaran dan gudang lain terima kasih kepada Pembekal PowerShell.
Dalam panduan ini saya menerangkan, dengan contoh sebenar dan beberapa teknik, bagaimana berunding, mentafsir dan mendiagnosis atribut (termasuk yang khusus awan), cara menyenaraikan dan membaca nilai pendaftaran dengan cmdlet yang sama, cara mengelakkan perangkap apabila melaksanakan dari jauh, dan cara melengkapkan penyulitan fail dengan Ekosistem CMS untuk menyulitkan/menyahsulit kandungan. Semua ini, dengan arahan sedia untuk salin dan tampal, dan amalan yang baik supaya anda tidak meninggalkan apa-apa.
Apakah itu Get-ItemProperty dan mengapa ia penting untuk atribut dan pendaftaran?
cmdlet itu Dapatkan-ItemProperty memperoleh sifat-sifat elemen yang didedahkan oleh pembekal PowerShell. Ini termasuk fail dan folder (FileSystem), tetapi juga kunci dan nilai dalam pendaftaran, sijil, pembolehubah persekitaran, alias, dll. Dalam kes sistem fail, kami amat berminat dengan pemilikan Atribut, yang merangkum bendera fail atau direktori, termasuk Dienkripsi (EFS) dan penunjuk bagi OneDrive sebagai disematkan, dinyahsemat o RecallOnDataAccess.
Sintaks yang paling banyak digunakan ialah langsung: Dapatkan-ItemProperty. Anda boleh menapis mengikut nama harta dengan -Name, lulus laluan literal dengan -LiteralPath dan gunakan -Tapis, -Sertakan y -Kecualikan apabila pembekal menyokongnya (FileSystem tidak). Juga, Parameter Biasa seperti -Verbose, -ErrorAction atau -OutVariable tersedia untuk menambah baik diagnostik semasa memeriksa atribut sensitif.
Sintaks dan Parameter Penting (dengan fokus pada FileSystem dan Registry)
Untuk bekerja dengan selesa adalah mudah untuk mempunyai di tangan sintaks yang disokong oleh cmdlet, kedua-duanya dengan laluan biasa dan dengan laluan literal yang anda tidak mahu tafsiran kad bebas:
Contoh sintaks A:
Get-ItemProperty <String[]> <String[]>] >] >]
Contoh sintaks B:
Get-ItemProperty <String[]>] -LiteralPath <String[]> >] >]
Parameter yang paling berguna untuk tujuan kami ialah -Laluan y -Name (untuk memilih sifat tertentu), -LiteralPath (menghalang kad bebas daripada ditafsirkan), pemilih -Sertakan y -Kecualikan (mereka beroperasi pada kandungan apabila anda memasukkan kad bebas, contohnya C:\Windows\*), dan -Tapis daripada pembekal FileSystem yang lebih cekap pada peringkat enjin daripada menapis kemudian dalam PowerShell.
Nota praktikal: -Tauliah Ia wujud, tetapi kegunaannya dengan FileSystems tempatan adalah terhad; ia masuk akal pada pembekal jauh atau apabila anda memasang PSDrides dengan kelayakan. Dan jangan lupa bahawa cmdlet menerima Laluan pendaftaran jenis itu HKLM:\
y Registry::
, yang membolehkan anda bekerja dengan kunci dan nilai seolah-olah ia adalah fail, yang menjadikan pengauditan lebih mudah.
Contoh cepat untuk memanaskan badan
Mari kita lihat beberapa contoh mudah yang meletakkan asas sebelum kita menyelami EFS dan OneDrive:
Periksa direktori tertentu dan lihat semua sifatnya yang tersedia (Atribut disertakan):
Get-ItemProperty C:\Windows
Senaraikan semua sifat fail tertentu dalam format senarai, berguna apabila anda ingin melihat jika ia muncul Dienkripsi atau bendera awan:
Get-ItemProperty C:\Test\Weather.xls | Format-List
Pendaftaran: Baca nilai ProgramFilesDir dalam CurrentVersion, berguna apabila mengautomasikan inventori:
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name 'ProgramFilesDir'
Log: senaraikan semua entri di bawah PowerShellEngine untuk melihat nama nilai dan data:
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
Mentafsir atribut dengan betul: EFS, OneDrive dan bendera lain
Bidang Atribut ialah bendera enum daripada .NET () yang boleh dikembalikan sebagai teks ("Tersembunyi, Baca Sahaja, …") atau sebagai nombor bulat apabila anda menanyakannya dalam konteks tertentu (cth. beberapa laluan OneDrive dengan Get-ItemProperty). Untuk mengelak daripada tersesat, sebaiknya hantar nilai secara eksplisit ke penghitungan dan semak bendera individu.
Semak sama ada fail disulitkan dengan EFS (FILE_ATTRIBUTE_ENCRYPTED = 0x4000 = 16384):
$it = Get-ItemProperty -Path 'C:\ruta\fichero.ext';
$attr = $it.Attributes;
$esEfs = $attr.HasFlag(::Encrypted);
$esEfs
Tukar nomborJika anda lebih suka melihat terjemahan nombor "mentah" (cth., nombor yang dikembalikan oleh OneDrive), anda boleh melakukan perkara berikut untuk mendapatkan nama bendera:
::ToObject(, 525328)
dengan OneDrive Files On-Demand Terdapat gabungan mengelirukan yang termasuk beberapa bendera "awan" sebagai tambahan kepada yang klasik (Direktori, Arkib, RepairPoint, Luar Talian, dll.). Sebagai contoh, nilai yang dilihat dalam senario kehidupan sebenar:
- 525328 (folder): sepadan dengan Direktori (0x10) + ReparsePoint (0x400) + disematkan (0x80000). Ini biasanya bermaksud "sentiasa tersedia pada peranti ini."
- 5248544 (fail): terurai sebagai ReparsePoint (0x400) + Luar Talian (0x1000) + SparseFile (0x200) + Arkib (0x20) + dinyahsemat (0x100000) + RecallOnDataAccess (0x400000). Ini sepadan dengan "tersedia dalam talian" (awan sahaja).
Untuk mengesahkan penguraian anda dengan PowerShell, gunakan semakan bendera individu terhadap nombor asal, supaya anda melihat dengan tepat bit mana yang aktif:
$n = 5248544
$fa =
@('Directory','Archive','Hidden','System','ReadOnly','Compressed','Encrypted','Offline','ReparsePoint','SparseFile','Temporary','Pinned','Unpinned','RecallOnOpen','RecallOnDataAccess') |
ForEach-Object {
$flag = ::Parse($fa, $_)
'{0,-18} : {1}' -f $_, ((($n) -band $flag))
}
Jika anda hanya berminat untuk membezakan penyulitan EFS Sebagai pemegang tempat OneDrive, fokus pada bendera utama ini: Dienkripsi (SAI), disematkan, dinyahsemat, RecallOnOpen, RecallOnDataAccess, Offline y RepairPoint. Dengan cara ini anda boleh membezakan fail yang dilindungi secara tempatan oleh EFS daripada fail yang hanya wujud sebagai puntung dalam awan.
Menjawab soalan biasa tentang atribut OneDrive dan cara menerokanya
Soalan Lazim Pantas: Nombor seperti 525328 dan 5248544 ialah tiga soalan yang paling kerap ditanya. Berikut ialah jawapan praktikal untuk kehidupan seharian anda:
1) Apakah maksud 525328 dalam folder OneDrive? Ia adalah jumlah Direktori (0x10) + RepairPoint (0x400) + Disemat (0x80000). Dalam amalan, ia menunjukkan bahawa ia adalah folder OneDrive yang dipautkan kepada pembekal awan (titik reparse) dan ditandakan sebagai "Sentiasa tersedia" tempatan.
2) Apakah nilai lain yang boleh saya temui dan bagaimana saya boleh menerokanya? Anda akan melihat gabungan dengan Dinyahsemat (0x100000), RecallOnOpen (0x40000), RecallOnDataAccess (0x400000), Luar Talian (0x1000), sebagai tambahan kepada yang klasik Arkib, Tersembunyi, sistem, dsb. Untuk menyahkodnya:
- Kegunaan ::ToObject() untuk menterjemah nombor kepada nama bendera.
– Atau sahkan sedikit demi sedikit dengan -band / HasFlag() seperti dalam contoh di atas.
– Jika anda lebih suka melihat teks terus untuk fail tempatan, Dapatkan-Item mengembalikan sifat Atribut yang telah "diselesaikan": (Get-Item 'C:\ruta\fichero').Attributes
.
3) Adakah terdapat lebih banyak atribut fail selain OneDrive? Ya: Dienkripsi (SAI), Mampat, Baca sahaja, Tersembunyi, sistem, Arkib, Sementara, NotContentIndexed, Aliran Integriti, NoScrubData, dsb. Dalam PowerShell anda boleh menerokanya semua menghitung kelas:
::GetNames()
Semak dan tetapkan penyulitan EFS daripada PowerShell
Untuk menyemak sama ada fail dilindungi dengan EFSAnda telah melihat semakan dengan bendera Disulitkan. Jika anda perlu menetapkan penyulitan dengan cepat, anda boleh menggunakan klasik cipher.exe atau gunakan sifat Atribut itu sendiri:
Dayakan EFS dengan baris arahan:
cipher /E "C:\ruta\fichero.ext"
PowerShell (menambah bendera Dienkripsi):
$i = Get-Item 'C:\ruta\fichero.ext'
$i.Attributes = $i.Attributes -bor ::Encrypted
Jika anda ingin melumpuhkan EFS, hanya keluarkan bendera dengan -band -bxor atau gunakan sifir /D, memberikan anda kawalan yang terperinci tanpa meninggalkan PowerShell dan memastikan automasi konsisten dengannya Dapatkan-ItemProperty.
Bekerja dengan Pejabat Pendaftaran: penghitungan, bacaan khusus dan navigasi
Pendaftaran dalam PowerShell dianggap sebagai kedai lain terima kasih kepada pembekal pendaftaran. Entri nilai adalah hartanah setiap kunci, jadi untuk melihatnya dalam format yang lebih baik adalah ideal untuk digunakan Dapatkan-ItemPropertyAliran biasa ialah:
Lihat nama entri (harta "Harta") kunci:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
Lihat entri dengan nama dan data (format boleh dibaca):
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Anda navigasi dengan Set-Location dan gunakan .
untuk lokasi semasa, seperti dalam sistem fail:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Get-ItemProperty -Path .
Bacaan spot biasa dengan -Name untuk nilai tertentu:
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
Untuk menulis atau mencipta nilai, anda mempunyai cmdlet adik-beradik: Set-ItemProperty, New-ItemProperty, Namakan semula-ItemProperty y Buang-ItemProperty, dengan sokongan untuk jenis seperti Rentetan, ExpandString, Perduaan, Kata Kunci, MultiString o QWord menurut RegistryValueKind.
Berhati-hati dengan pelaksanaan jauh: kes MachineGuid
Terdapat keanehan yang ingin tahu dengan Memohon-perintah dan pembekal Pendaftaran: jika anda menjalankan Get-Item
pada HKLM:\Software\Microsoft\Cryptography\
dari jauh, nilainya mungkin MachineGuid yang anda lihat adalah pasukan tempatan anda walaupun jika PSKomputerNama tunjukkan mesin jauh. Ini nampaknya berkaitan dengan bersiri objek yang dikembalikan oleh pembekal.
Untuk mengelakkan bacaan yang salah, paksa output rata atau tanya nilai dengan Dapatkan-ItemProperty. Kedua-dua varian ini mengembalikan MachineGuid yang betul daripada pasukan jauh:
Invoke-Command -ComputerName 'PC1' -ScriptBlock { Get-Item 'HKLM:\Software\Microsoft\Cryptography\' | Out-String }
Invoke-Command -ComputerName 'PC1' -ScriptBlock { Get-ItemProperty 'HKLM:\Software\Microsoft\Cryptography\' -Name 'MachineGuid' }
Apabila audit anda bergantung pada nilai Log kritikal, adalah lebih baik sahkan dengan Get-ItemProperty atau bersiri kepada rentetan sebelum membawa semula respons ke sesi setempat, sekali gus mengelakkan hasil yang mengelirukan.
Pembekal PowerShell dan PSDrive: Pelan Hala Tuju Semuanya
Pembekal PowerShell ialah komponen .NET yang mendedahkan gudang data seolah-olah ia adalah unit (PSDrives). Terima kasih kepada mereka, cmdlet seperti Get-Item, Get-ChildItem, Get-ItemProperty atau Set-Location berfungsi sama dalam Sistem Fail, Pendaftaran, Persekitaran, Sijil, Pembolehubah, Fungsi, Alias o WSMan. Anda boleh menyenaraikan pembekal dengan Get-PSProvider
dan lihat PSDrives aktif dengan Get-PSDrive
.
Beberapa cmdlet universal yang anda akan gunakan tanpa henti dengan pembekal ialah: Dapatkan-Lokasi (gl), Set-Lokasi (cd), Item Salin (cpi), Dapatkan-Item (gi), Set-Item (jika), Get-ChildItem (dir/ls), serta seluruh keluarga ItemProperty untuk Pejabat Pendaftaran. Ingat: pembekal berkongsi kata kerja yang sama, jadi otot yang sama, simpanan berbeza.
Beberapa contoh ringkas untuk membantu anda bergerak dengan mudah:
- Alias:
Set-Location Alias:
yGet-ChildItem
untuk menyenaraikan alias; tapis mengikut nama dengan-Name R*
oWhere-Object
. - alam Sekitar:
Set-Location Env:
yGet-ChildItem
untuk melihat pembolehubah; buat yang baru denganNew-Item -Path . -Name MiVariable -Value 'texto'
. - pendaftaran:
Set-Location HKLM:\Software
,Get-ChildItem
untuk kunci,Get-ItemProperty
untuk data; buat/padam dengan cmdlet ItemProperty.
Gunakan kes yang menggabungkan Get-ItemProperty dengan pengauditan sistem
Apabila anda mengambil inventori atau diagnosis, Dapatkan-ItemProperty Ia muncul dalam resipi yang tidak terkira banyaknya. Sebagai contoh, untuk menyenaraikan aplikasi yang dipasang berunding dengan kunci penyahpasangan:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object InstallDate
Atau untuk melihat sejarah naik taraf di tempat dari Windows dari Registry:
Get-ItemProperty -Path 'HKLM:\SYSTEM\Setup\Source OS*' |
Select-Object PSChildName, ProductName, ReleaseId, DisplayVersion, CurrentBuild
Di bahagian lain sistem, anda boleh melengkapkan audit anda dengan cmdlet dan utiliti yang terkenal (tidak semuanya menggunakan Get-ItemProperty, tetapi ia boleh disepadukan ke dalam skrip anda): Dapatkan-Hotfix, Dapatkan-WindowsUpdateLog, ipconfig / semua, powercfg (tenaga, sleepstudy, wakettimers), Dapatkan-CimInstance untuk peranti, monitor atau volum, atau Dapatkan-NetAdapterAdvancedProperty untuk rangkaian. Ideanya ialah, dengan pembekal dan Pejabat Pendaftaran di bawah kawalan, awak mengarang seorang pengumpul bukti yang teguh dan anda tahu artifak dalam Windows.
Di bahagian lain sistem, anda boleh melengkapkan audit anda dengan cmdlet dan utiliti yang terkenal (tidak semuanya menggunakan Get-ItemProperty, tetapi ia boleh disepadukan ke dalam skrip anda): Dapatkan-Hotfix, Dapatkan-WindowsUpdateLog, ipconfig / semua, powercfg (tenaga, sleepstudy, wakettimers), Dapatkan-CimInstance untuk peranti, monitor atau volum, atau Dapatkan-NetAdapterAdvancedProperty untuk rangkaian. Ideanya ialah, dengan pembekal dan Pejabat Pendaftaran di bawah kawalan, awak mengarang seorang pengumpul bukti yang teguh.
Di bahagian lain sistem, anda boleh melengkapkan audit anda dengan cmdlet dan utiliti yang terkenal (tidak semuanya menggunakan Get-ItemProperty, tetapi ia boleh disepadukan ke dalam skrip anda): Dapatkan-Hotfix, Dapatkan-WindowsUpdateLog, ipconfig / semua, powercfg (tenaga, sleepstudy, wakettimers), Dapatkan-CimInstance untuk peranti, monitor atau volum, atau Dapatkan-NetAdapterAdvancedProperty untuk rangkaian. Ideanya ialah, dengan pembekal dan Pejabat Pendaftaran di bawah kawalan, awak mengarang seorang pengumpul bukti yang teguh.
Menyulitkan dan menyahsulit data dengan CMS: pelengkap ideal kepada atribut Disulitkan
Atribut Dienkripsi (EFS) melindungi pada peringkat sistem fail. Apabila anda memerlukan menyulitkan kandungan Mudah alih untuk berkongsi dengan pihak ketiga, cmdlet CMS PowerShell ialah sekutu anda: Protect-CmsMessage (kod), Unprotect-CmsMessage (menghurai) dan Dapatkan-CmsMessage (periksa metadata).
Penciptaan pantas a sijil penyulitan daripada INF (tetapkan Subjek kepada identiti anda), minta dengan certreq
dan pengesahan di gudang pengguna:
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
Get-ChildItem -Path Cert:\CurrentUser\My -DocumentEncryptionCert
Dengan sijil sedia, anda boleh menyulitkan fail teks dan kemudian sahkan/nyahsulit:
$Text = 'Texto secreto que quiero proteger';
Protect-CmsMessage -To 'cn=tu@dominio.local' -Content $Text -OutFile MiTextoCifrado.txt
Get-CmsMessage -Path .\MiTextoCifrado.txt | Unprotect-CmsMessage -To 'cn=tu@dominio.local'
Gabungan ini membolehkan anda merangkumi kedua-dua atribut Dienkripsi (EFS) pada cakera sebagai penyulitan mesej untuk pertukaran selamat, dan semua ini boleh dilihat/boleh diurus dengan prinsip yang sama yang telah anda uruskan Dapatkan-ItemProperty.
Trik dan format untuk menyampaikan maklumat dengan jelas
Apabila memeriksa atribut, pembentangan penting. Untuk melihat senarai yang boleh dibaca, gunakan Senarai Format (FL) dan Format-Jadual (FT); jika anda bekerja dengan laluan yang panjang atau banyak hartanah, Out-String kadangkala mengelakkan kejutan dengan pembekal seperti Pejabat Pendaftaran:
Format senarai penuh daripada fail:
Get-ItemProperty 'C:\ruta\fichero.ext' | Format-List *
Keluaran teks (berguna dari jauh dengan Invoke-Command):
Get-Item 'HKLM:\Software\Microsoft\Cryptography\' | Out-String
Untuk mengeksport penemuan anda ke CSV (inventori, audit), pilih hanya perkara yang berkaitan dan simpan dengannya Eksport-Csv, yang memudahkan perbandingan masa depan dan semakan pihak ketiga terhadap peralatan anda:
Get-ChildItem 'C:\Users\tu\OneDrive' -Recurse -File |
Select-Object FullName, @{n='AttrNum';e={(Get-ItemProperty $_.FullName).Attributes}}, @{n='Attributes';e={(Get-Item $_.FullName).Attributes}} |
Export-Csv C:\Temp\oneDrive_attrs.csv -NoTypeInformation -Encoding UTF8
Amalan yang baik dan nota akhir untuk mengelakkan tersandung
- Perbezaan antara EFS dan awan: Hanya kerana fail tidak "sentiasa tersedia" tidak bermakna ia disulitkan. Cari bendera secara eksplisit. Dienkripsi apabila matlamat anda ialah EFS.
- Gunakan LiteralPath jika terdapat aksara jarang dalam laluan untuk menghalangnya daripada ditafsirkan sebagai kad bebas, terutamanya dalam laluan Pendaftaran dan UNC.
- Pembekal Sistem Fail menyokong Penapis: Gunakan ini untuk kecekapan semasa mengimbas pepohon direktori yang besar.
- Memohon-perintah: Jika anda membaca Daftar Jauh, pilih Dapatkan-ItemProperty atau bersiri kepada teks dengan Out-String untuk mengelakkan ketidakpadanan (MachineGuid case).
Dengan senjata ini anda akan tahu pada setiap masa jika sesuatu elemen itu penyulitan EFS, jika ia adalah a Pemegang tempat OneDrive, cara menyahkod nombor atribut yang kelihatan samar, dan cara bersandar pada Pembekal PowerShell untuk meneroka Registry dan sumber repositori lain dengan lancar. Semua dengan contoh dan arahan yang boleh dihasilkan semula, anda boleh menyepadukan ke dalam skrip inventori, audit atau keselamatan anda tanpa melanggar aliran kerja semasa anda.
Penulis yang bersemangat tentang dunia bait dan teknologi secara umum. Saya suka berkongsi pengetahuan saya melalui penulisan, dan itulah yang akan saya lakukan dalam blog ini, menunjukkan kepada anda semua perkara yang paling menarik tentang alat, perisian, perkakasan, trend teknologi dan banyak lagi. Matlamat saya adalah untuk membantu anda mengemudi dunia digital dengan cara yang mudah dan menghiburkan.