Windows PowerShell Gezinti Sağlayıcısı Oluşturma
bu konuda, veri deposunda gezinebilen bir Windows PowerShell gezinti sağlayıcısının nasıl oluşturulacağı açıklanmaktadır. Bu tür bir sağlayıcı özyinelemeli komutları, iç içe kapsayıcıları ve göreli yolları destekler.
Not
Windows Vista ve .NET Framework 3,0 çalışma zamanı bileşenleri için Microsoft Windows yazılım geliştirme seti 'ni kullanarak bu sağlayıcının C# kaynak dosyasını (AccessDBSampleProvider05. cs) indirebilirsiniz. indirme yönergeleri için bkz. nasıl yüklenir Windows PowerShell ve Windows PowerShell SDK 'sını indirin. İndirilen kaynak dosyalar <PowerShell Samples> dizinde bulunur. diğer Windows PowerShell sağlayıcı uygulamaları hakkında daha fazla bilgi için, bkz. Windows PowerShell sağlayıcınızı tasarlama.
Burada açıklanan sağlayıcı, kullanıcının veritabanındaki veri tablolarına gidebilmesi için, kullanıcının bir erişim veritabanını sürücü olarak işlemesini sağlar. Kendi gezinti sağlayıcınızı oluştururken gezinti için gereken sürücü nitelikli yolları, göreli yolları Normalleştir, veri deposunun öğelerini taşıyabilir, alt adları alan ve bir öğenin üst yolunu alan ve bir öğenin kapsayıcı olup olmadığını belirlemek için test edebilirsiniz.
Dikkat
Bu tasarımın, adı KIMLIĞI olan bir alanı olan bir veritabanını varsaydığını ve alanın türünün LongInteger olduğunu unutmayın.
Windows PowerShell sağlayıcıyı tanımlama
Windows PowerShell bir gezinti sağlayıcısı, System. Management. Automation. provider. navigationcmdletprovider temel sınıfından türetilen bir .net sınıfı yaratmalıdır. Bu bölümde açıklanan gezinti sağlayıcısının sınıf tanımı aşağıda verilmiştir.
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : NavigationCmdletProvider
Bu sağlayıcıda System. Management. Automation. Provider. Cmdletproviderattribute özniteliğinin iki parametre içerdiğini unutmayın. İlk parametre, Windows PowerShell tarafından kullanılan sağlayıcı için Kullanıcı dostu bir ad belirtir. ikinci parametre, komut işleme sırasında sağlayıcının Windows PowerShell çalışma zamanına sunduğu Windows PowerShell özgü özellikleri belirtir. bu sağlayıcı için, eklenen Windows PowerShell belirli bir özellik yoktur.
Taban Işlevleri tanımlama
PS sağlayıcınızı tasarlamabölümünde açıklandığı gibi, System. Management. Automation. Provider. navigationcmdletprovider temel sınıfı farklı sağlayıcı işlevselliği sağlayan diğer birçok sınıftan türetilir. bu nedenle, Windows PowerShell bir gezinti sağlayıcısı, bu sınıfların sunduğu tüm işlevleri tanımlamalıdır.
Oturuma özgü başlatma bilgilerini ekleme ve sağlayıcı tarafından kullanılan kaynakları serbest bırakma işlevlerini uygulamak için bkz. temel PS sağlayıcısı oluşturma. Bununla birlikte, çoğu sağlayıcı (burada açıklanan sağlayıcı dahil) Windows PowerShell tarafından sağlanmış olan bu işlevselliğin varsayılan uygulamasını kullanabilir.
Windows PowerShell bir sürücü aracılığıyla veri deposuna erişim sağlamak için System. Management. Automation. Provider. drivecmdletprovider temel sınıfının yöntemlerini uygulamanız gerekir. bu yöntemleri uygulama hakkında daha fazla bilgi için bkz. Windows PowerShell sürücü sağlayıcısı oluşturma.
Öğe alma, ayarlama ve temizleme gibi bir veri deposunun öğelerini işlemek için, sağlayıcının System. Management. Automation. Provider. ıtemcmdletprovider temel sınıfı tarafından sunulan yöntemleri uygulaması gerekir. bu yöntemleri uygulama hakkında daha fazla bilgi için bkz. Windows PowerShell öğesi sağlayıcısı oluşturma.
Öğe oluşturan, kopyalama, yeniden adlandırma ve kaldırma yöntemlerine ek olarak, alt öğeleri veya bunların adlarını veya bunların adlarını almak için, System. Management. Automation. Provider. Containercmdletprovider temel sınıfı tarafından sunulan yöntemleri uygulamanız gerekir. bu yöntemleri uygulama hakkında daha fazla bilgi için bkz. Windows PowerShell kapsayıcı sağlayıcısı oluşturma.
Windows PowerShell yolu oluşturma
Windows PowerShell gezinti sağlayıcısı, veri deposunun öğelerine gitmek için sağlayıcı-iç Windows PowerShell yolunu kullanın. Sağlayıcı-iç yol oluşturmak için, sağlayıcının Combine-Path cmdlet 'inin çağrılarını desteklemesi için System. Management. Automation. Provider. Navigationcmdletprovider. makepath * metodunu uygulaması gerekir. Bu yöntem, üst ve alt yollar arasında sağlayıcıya özgü yol ayırıcısını kullanarak bir üst ve alt yolu sağlayıcı iç yoluna birleştirir.
Varsayılan uygulama yol ayırıcısı olarak "/" veya "" ile yollar alır, \ yol ayırıcısını "" olarak normalleştirir \ , üst ve alt yol parçalarını aralarındaki ayırıcıyla birleştirir ve sonra Birleşik yolları içeren bir dize döndürür.
Bu gezinti sağlayıcısı bu yöntemi uygulamıyor. Ancak, aşağıdaki kod System. Management. Automation. Provider. Navigationcmdletprovider. makepath * yönteminin varsayılan uygulamasıdır.
MakePath uygulama hakkında hatırlamaları gerekenler
System. Management. Automation. Provider. Navigationcmdletprovider. makepath *uygulamanız için aşağıdaki koşullar geçerli olabilir:
System. Management. Automation. Provider. Navigationcmdletprovider. makepath * yöntemi uygulamanız, yolu sağlayıcı ad alanında geçerli bir tam yol olarak doğrulamamalıdır. Her parametrenin yalnızca bir yolun bir bölümünü temsil ettiğini ve birleştirilmiş parçaların tam nitelikli bir yol üretmediğini unutmayın. Örneğin, dosya sistemi sağlayıcısı için System. Management. Automation. Provider. Navigationcmdletprovider. makepath * yöntemi, parametresinde "Windows\System32"
parent
ve parametresinde "abc.dll" alabilirchild
. Yöntemi bu değerleri " \ " ayırıcısıyla birleştirir ve tam nitelikli dosya sistemi yolu olmayan "windows\system32\abc.dll" döndürür.Önemli
System. Management. Automation. Provider. Navigationcmdletprovider. makepath * çağrısında verilen yol parçaları, sağlayıcı ad alanında izin verilmeyen karakterler içeriyor olabilir. Bu karakterler büyük olasılıkla joker karakter genişletmesi için kullanılır ve bu yöntemin uygulanması onları kaldırmamalıdır.
Üst yol alınıyor
Windows PowerShell gezinti sağlayıcıları, belirtilen tam veya kısmi sağlayıcıya özgü yolun üst bölümünü almak için System. Management. Automation. Provider. navigationcmdletprovider. getparentpath * metodunu uygular. Yöntemi yolun alt bölümünü kaldırır ve üst yol parçasını döndürür. root
Parametresi, bir sürücünün köküne tam yolu belirtir. Bağlı bir sürücü alma işlemi için kullanımda değilse, bu parametre null veya boş olabilir. Bir kök belirtilmişse, yöntemin aynı ağaçtaki bir kapsayıcının yolunu, kökle döndürmesi gerekir.
Örnek gezinti sağlayıcısı bu yöntemi geçersiz kılmaz, ancak varsayılan uygulamayı kullanır. Yol ayırıcıları olarak hem "/" hem de "" kullanan yolları kabul eder \ . İlk olarak yolu yalnızca "" ayırıcılarına sahip olacak şekilde normalleştirir \ , sonra üst yolu son "" olarak böler \ ve üst yolu döndürür.
GetParentPath uygulama hakkında hatırlamanız için
System. Management. Automation. Provider. Navigationcmdletprovider. GetParentPath * yönteminin uygulanması, sağlayıcı ad alanı için yol ayırıcısına yol sözcüksel 'i ayırmalıdır. Örneğin, dosya sistemi sağlayıcısı son "" öğesini aramak için bu yöntemi kullanır \ ve ayırıcının soluna her şeyi döndürür.
Alt yol adını alma
Gezinti sağlayıcınız, belirtilen tam veya kısmi sağlayıcıya özgü yolda bulunan öğenin alt öğesinin adını (yaprak öğe) almak için System. Management. Automation. Provider. Navigationcmdletprovider. Getchildname * metodunu uygular.
Örnek gezinti sağlayıcısı bu yöntemi geçersiz kılmaz. Varsayılan uygulama aşağıda gösterilmiştir. Yol ayırıcıları olarak hem "/" hem de "" kullanan yolları kabul eder \ . İlk olarak yolu yalnızca "" ayırıcılarına sahip olacak şekilde normalleştirir \ , sonra üst yolu son "" olarak böler \ ve alt yol bölümünün adını döndürür.
GetChildName uygulama hakkında hatırlamaları gerekenler
System. Management. Automation. Provider. Navigationcmdletprovider. Getchildname * yönteminin uygulamanız yol ayırıcısını yol ayırıcısına göre bölülemelidir. Sağlanan yol yol ayırıcıları içermiyorsa, yöntem yolu değiştirilmemiş olarak döndürmelidir.
Önemli
Bu yönteme yapılan çağrıda belirtilen yol, sağlayıcı ad alanında geçersiz karakterler içeriyor olabilir. Bu karakterler büyük olasılıkla joker karakter genişletmesi veya normal ifade eşleştirmesi için kullanılır ve bu yöntemin uygulanması onları kaldırmamalıdır.
Bir öğenin kapsayıcı olup olmadığını belirleme
Gezinti sağlayıcısı, belirtilen yolun bir kapsayıcıyı olduğunu anlamak için System. Management. Automation. Provider. Navigationcmdletprovider. IsItemContainer * metodunu uygulayabilir. Yol bir kapsayıcıyı temsil ediyorsa true, aksi takdirde false döndürür. Kullanıcının Test-Path
sağlanan yol için cmdlet 'ini kullanabilmesi için Bu metoda ihtiyacı vardır.
Aşağıdaki kod, örnek gezinti sağlayıcımız içinde System. Management. Automation. Provider. Navigationcmdletprovider. IsItemContainer * uygulamasını gösterir. Yöntemi belirtilen yolun doğru olduğunu ve tablonun mevcut olduğunu doğrular ve yol bir kapsayıcıyı gösteriyorsa true değerini döndürür.
protected override bool IsItemContainer(string path)
{
if (PathIsDrive(path))
{
return true;
}
string[] pathChunks = ChunkPath(path);
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
foreach (DatabaseTableInfo ti in GetTables())
{
if (string.Equals(ti.Name, tableName, StringComparison.OrdinalIgnoreCase))
{
return true;
}
} // foreach (DatabaseTableInfo...
} // if (pathChunks...
return false;
} // IsItemContainer
Iıtemcontainer uygulama hakkında hatırlamaları gerekenler
Gezinti sağlayıcınız .NET sınıfınız, System. Management. Automation. Provider. ProviderCapabilities numaralandırmasından Expandjoker karakter, filtre, dahil etme veya hariç tutma için sağlayıcı özellikleri bildirebilir. Bu durumda, System. Management. Automation. Provider. Navigationcmdletprovider. IsItemContainer * uygulamasının, geçirilen yolun gereksinimleri karşıladığından emin olması gerekir. Bunu yapmak için yöntemin uygun özelliğe erişmesi gerekir, örneğin, System. Management. Automation. Provider. Cmdletprovider. Exclude * özelliği.
Bir öğeyi taşıma
Cmdlet 'i desteklemek için Move-Item
, gezinti sağlayıcınız System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * metodunu uygular. Bu yöntem, parametresi tarafından belirtilen öğeyi path
parametresinde sağlanan yoldaki kapsayıcıya taşıtır destination
.
Örnek gezinti sağlayıcısı System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * metodunu geçersiz kılmaz. Varsayılan uygulama aşağıda verilmiştir.
MoveItem uygulama hakkında hatırlamaları gerekenler
Gezinti sağlayıcınız .NET sınıfınız, System. Management. Automation. Provider. ProviderCapabilities numaralandırmasından Expandjoker karakter, filtre, dahil etme veya hariç tutma için sağlayıcı özellikleri bildirebilir. Bu durumda, System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * uygulamasının, geçirilen yolun gereksinimleri karşıladığından emin olması gerekir. Bunu yapmak için yöntemin uygun özelliğe erişmesi gerekir, örneğin, Cmdletprovider. Exclude özelliği.
Varsayılan olarak, System. Management. Automation. Provider. Cmdletprovider. zorlamalı * özelliği olarak ayarlanmadığı takdirde bu yöntemin geçersiz kılmaları nesneleri varolan nesneler üzerinde taşımamalıdır true
. Örneğin, System. Management. Automation. Provider. Cmdletprovider. zorlamalı * özelliği olarak ayarlanmadığı takdirde dosya sistemi sağlayıcısı mevcut bir c:\bar.txt dosyası üzerinden c:\temp\abc.txt kopyalamacaktır true
. Parametresinde belirtilen yol destination
varsa ve bir kapsayıcı ise, System. Management. Automation. Provider. Cmdletprovider. zorlamalı * özelliği gerekli değildir. Bu durumda, System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * parametresi tarafından belirtilen öğeyi path
bir alt öğe olarak belirtilen kapsayıcıya taşımalıdır destination
.
System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * yönteminin uygulamanız System. Management. Automation. Provider. Cmdletprovider. ShouldProcess 'i çağırmalıdır ve veri deposunda değişiklik yapmadan önce dönüş değerini denetlemelidir. Bu yöntem, sistem durumunda bir değişiklik yapıldığında bir işlemin yürütülmesini doğrulamak için kullanılır; Örneğin, dosyaları silme. System. Management. Automation. Provider. cmdletprovider. shouldprocess , kullanıcıya değiştirilecek kaynak adını, kullanıcıya hangi komut satırı ayarlarının veya tercih değişkenlerinin kullanıcı tarafından gösterileceğini belirlemede kullanılacak şekilde, Windows PowerShell çalışma zamanına sahip olacak şekilde gönderir.
System. Management. Automation. Provider. Cmdletprovider. ShouldProcess çağrısı yapıldıktan sonra true
System. Management. Automation. Provider. Navigationcmdletprovider. MoveItem * yöntemi System. Management. Automation. Provider. cmdletprovider. shouldcontinue metodunu çağırmalıdır. Bu yöntem, işleme devam edilmesi gerekiyorsa, kullanıcıya geri bildirimde bulunmak üzere bir ileti gönderir. Sağlayıcınız System. Management. Automation. Provider. Cmdletprovider 'ı çağırmalıdır. Should, tehlikeli olabilecek sistem değişikliklerine yönelik ek bir denetim olarak devam eder.
Move-Item cmdlet 'Ine dinamik parametreler iliştirme
Bazen Move-Item
cmdlet, çalışma zamanında dinamik olarak sağlanmış ek parametreler gerektirir. Bu dinamik parametreleri sağlamak için, gezinti sağlayıcısı, belirtilen yoldaki öğeden gerekli parametre değerlerini almak için System. Management. Automation. Provider. Navigationcmdletprovider. Moveıtemdynamicparameters * metodunu uygulamalıdır ve bir cmdlet sınıfına ya da System. Management. Automation. Runtimedefinedparameterdictionary nesnesine benzer öznitelikleri ayrıştırarak özelliklerine ve alanlara sahip bir nesne döndürür.
Bu gezinti sağlayıcısı bu yöntemi uygulamıyor. Ancak, aşağıdaki kod System. Management. Automation. Provider. Navigationcmdletprovider. Moveıtemdynamicparameters *öğesinin varsayılan uygulamasıdır.
Göreli bir yolu normalleştirirken
Gezinti sağlayıcınız, parametresinde belirtilen tam yolu parametre tarafından belirtilen yola göre normalleştirmek için System. Management. Automation. Provider. Navigationcmdletprovider. Normalizerelativepath * metodunu uygular path
basePath
. Yöntemi, normalleştirilmiş yolun dize gösterimini döndürür. path
Parametre varolmayan bir yol belirtiyorsa bir hata yazar.
Örnek gezinti sağlayıcısı bu yöntemi geçersiz kılmaz. Varsayılan uygulama aşağıda verilmiştir.
NormalizeRelativePath uygulama hakkında hatırlamaları gerekenler
System. Management. Automation. Provider. Navigationcmdletprovider. Normalizerelativepath * uygulamanız parametreyi ayrıştırmalıdır path
, ancak tamamen sözdizimsel ayrıştırma kullanmak zorunda değildir. Veri deposundaki yol bilgilerini aramak ve büyük/küçük harf ve standartlaştırılmış yol sözdizimi ile eşleşen bir yol oluşturmak için yolu kullanmak üzere bu yöntemi tasarlayacağız.
Kod Örneği
Tüm örnek kod için bkz. AccessDbProviderSample05 Code Sample.
Nesne türlerini ve biçimlendirmeyi tanımlama
Bir sağlayıcının varolan nesnelere üye eklemesi veya yeni nesneler tanımlanması mümkündür. Daha fazla bilgi için bkz.nesne türlerini ve biçimlendirmeyi genişletme.
Windows PowerShell sağlayıcısı oluşturma
Daha fazla bilgi için bkz. cmdlet 'leri, sağlayıcıları ve ana bilgisayar uygulamalarını kaydetme.
Windows PowerShell sağlayıcıyı test etme
Windows PowerShell sağlayıcınız Windows PowerShell kaydedilmişse, türetme tarafından kullanılabilir olan cmdlet 'ler dahil olmak üzere, komut satırında desteklenen cmdlet 'leri çalıştırarak test edebilirsiniz. Bu örnek, örnek gezinti sağlayıcısını test edecektir.
Yeni
Set-Location
kabuğunu çalıştırın ve cmdlet 'ini kullanarak erişim veritabanını belirtecek yolu ayarlayın.Set-Location mydb:
Şimdi,
Get-Childitem
kullanılabilir veritabanı tabloları olan veritabanı öğelerinin bir listesini almak için cmdlet 'ini çalıştırın. Her tablo için, bu cmdlet tablo satırı sayısını da alır.Get-ChildItem | Format-Table rowcount,name -AutoSize
RowCount Name -------- ---- 180 MSysAccessObjects 0 MSysACEs 1 MSysCmdbars 0 MSysIMEXColumns 0 MSysIMEXSpecs 0 MSysObjects 0 MSysQueries 7 MSysRelationships 8 Categories 91 Customers 9 Employees 2155 Order Details 830 Orders 77 Products 3 Shippers 29 Suppliers
Set-Location
Çalışanlar veri tablosunun konumunu ayarlamak için cmdlet 'ini yeniden kullanın.Set-Location Employees
Şimdi de,
Get-Location
çalışanlar tablosunun yolunu almak için cmdlet 'ini kullanalım.Get-Location
Path ---- mydb:\Employees
Şimdi
Get-Childitem
cmdlet 'e yöneltilen cmdlet 'i kullanınFormat-Table
. Bu cmdlet kümesi, tablo satırları olan çalışanlar veri tablosu için öğeleri alır. Cmdlet 'i tarafından belirtilen şekilde biçimlendirilirFormat-Table
.Get-ChildItem | Format-Table rownumber,psiscontainer,data -AutoSize
RowNumber PSIsContainer Data --------- -------------- ---- 0 False System.Data.DataRow 1 False System.Data.DataRow 2 False System.Data.DataRow 3 False System.Data.DataRow 4 False System.Data.DataRow 5 False System.Data.DataRow 6 False System.Data.DataRow 7 False System.Data.DataRow 8 False System.Data.DataRow
Artık,
Get-Item
çalışanlar veri tablosunun 0 satırı için öğeleri almak üzere cmdlet 'ini çalıştırabilirsiniz.Get-Item 0
PSPath : AccessDB::C:\PS\Northwind.mdb\Employees\0 PSParentPath : AccessDB::C:\PS\Northwind.mdb\Employees PSChildName : 0 PSDrive : mydb PSProvider : System.Management.Automation.ProviderInfo PSIsContainer : False Data : System.Data.DataRow RowNumber : 0
Get-Item
0 satırındaki öğelerin çalışan verilerini almak için cmdlet 'ini yeniden kullanın.(Get-Item 0).data
EmployeeID : 1 LastName : Davis FirstName : Sara Title : Sales Representative TitleOfCourtesy : Ms. BirthDate : 12/8/1968 12:00:00 AM HireDate : 5/1/1992 12:00:00 AM Address : 4567 Main Street Apt. 2A City : Buffalo Region : NY PostalCode : 98052 Country : USA HomePhone : (206) 555-9857 Extension : 5467 Photo : EmpID1.bmp Notes : Education includes a BA in psychology from Colorado State University. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International. ReportsTo : 2
Ayrıca Bkz.
Windows PowerShell sağlayıcıları oluşturma
Windows PowerShell sağlayıcınızı tasarlama
Nesne türlerini ve biçimlendirmeyi genişletme
kapsayıcı Windows PowerShell sağlayıcısı uygulama
Cmdlet 'Leri, sağlayıcıları ve ana bilgisayar uygulamalarını kaydetme
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin