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:

Ü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. rootParametresi, 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. pathParametre 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.

  1. Yeni Set-Location kabuğunu çalıştırın ve cmdlet 'ini kullanarak erişim veritabanını belirtecek yolu ayarlayın.

    Set-Location mydb:
    
  2. Ş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
    
  3. Set-LocationÇalışanlar veri tablosunun konumunu ayarlamak için cmdlet 'ini yeniden kullanın.

    Set-Location Employees
    
  4. Şimdi de, Get-Location çalışanlar tablosunun yolunu almak için cmdlet 'ini kullanalım.

    Get-Location
    
    Path
    ----
    mydb:\Employees
    
  5. Şimdi Get-Childitem cmdlet 'e yöneltilen cmdlet 'i kullanın Format-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çimlendirilir Format-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
    
  6. 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
    
  7. Get-Item0 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

Windows PowerShell Programcı Kılavuzu

Windows PowerShell SDK’sı