Özel PowerShellGet Depoları ile Çalışma

PowerShellGet modülü PowerShell Galerisi dışındaki depoları destekler. Bu cmdlet'ler aşağıdaki senaryoları etkinleştirir:

  • Ortamınızda kullanmak için güvenilir, önceden doğrulanmış bir PowerShell modülü kümesini destekleme
  • PowerShell modülleri veya betikleri oluşturan CI/CD işlem hattını test etme
  • PowerShell betiklerini ve modüllerini İnternet'e erişemez sistemlere teslim etme
  • PowerShell betiklerini ve modüllerini yalnızca kuruluşunuza sunma

Bu makalede, yerel bir PowerShell deposunun nasıl ayarlanacağı açıklanır. Makale, PowerShell Galerisi'den edinilebilen OfflinePowerShellGetDeploy modülünü de kapsar. Bu modül, PowerShellGet'in en son sürümünü yerel deponuza yüklemek için cmdlet'ler içerir.

Yerel depo türleri

Yerel PSRepository oluşturmanın iki yolu vardır: NuGet sunucusu veya dosya paylaşımı. Her türün avantajları ve dezavantajları vardır:

NuGet Sunucusu

Avantajlar Dezavantajlar
PowerShellGallery işlevselliğini taklit eder Çok katmanlı uygulama için işlem planlama & desteği gerekir
NuGet, Visual Studio ve diğer araçlarla tümleştirilir Kimlik doğrulama modeli ve NuGet hesapları yönetimi gerekiyor
NuGet paketlerde .Nupkg meta verileri destekler Yayımlama için API Anahtar yönetimi & bakımı gerekir
Arama, paket yönetimi vb. sağlar.

Dosya Paylaşımı

Avantajlar Dezavantajlar
Kurulumu, yedeklemesi ve bakımı kolay Temel dosya paylaşımının ötesinde kullanıcı arabirimi yok
Basit güvenlik modeli - paylaşımdaki kullanıcı izinleri Sınırlı güvenlik ve kimin neyi güncelleştirdiğinde kayıt olmaması
Mevcut öğeleri değiştirme gibi bir kısıtlama yoktur

PowerShellGet her iki türle de çalışır ve sürümlerin ve bağımlılık yüklemenin yerini belirlemeyi destekler. Ancak, PowerShell Galerisi için çalışan bazı özellikler temel NuGet sunucularında veya dosya paylaşımlarında kullanılamaz. Betiklerin, modüllerin, DSC kaynaklarının veya rol özelliklerinin farklılığı yoktur.

NuGet.Server deposu oluşturma

Aşağıdaki makalede kendi NuGet Sunucunuzu ayarlama adımları listelenmiştir.

Paketleri ekleme noktasına kadar olan adımları izleyin. Paket yayımlama adımları bu makalenin devamında ele alınmıştır.

Dosya paylaşımı tabanlı bir depo için, kullanıcılarınızın dosya paylaşımına erişim izinleri olduğundan emin olun.

Yerel depo kaydetme

Bir deponun kullanılabilmesi için önce komutu kullanılarak Register-PSRepository kaydedilmesi gerekir. Aşağıdaki örneklerde, kendi deponuza Trustedgüvendiğiniz varsayımı üzerine InstallationPolicy olarak ayarlanmıştır.

# Register a NuGet-based server
$registerPSRepositorySplat = @{
    Name = 'LocalPSRepo'
    SourceLocation = 'http://MyLocalNuget/Api/V2/'
    ScriptSourceLocation = 'http://MyLocalNuget/Api/V2'
    InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat

# Register a file share on my local machine
$registerPSRepositorySplat = @{
    Name = 'LocalPSRepo'
    SourceLocation = '\\localhost\PSRepoLocal\'
    ScriptSourceLocation = '\\localhost\PSRepoLocal\'
    InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat

İki komutun ScriptSourceLocation'ı işleme şekli arasındaki farkı not edin. Dosya paylaşımı tabanlı depolar için SourceLocation ve ScriptSourceLocation eşleşmelidir. Web tabanlı bir depo için bunların farklı olması gerekir, bu nedenle bu örnekte SourceLocation'a sondaki bir "/" eklenir.

NFS veya SMB gibi bir dosya paylaşım protokolü kullanırken protokolün güvenliğini sağlamak için önerilen yönergeleri izlediğinden emin olun. Windows'da SMB güvenliğini sağlama hakkında daha fazla bilgi için bkz. [SMB güvenlik geliştirmeleri][09].

Yeni oluşturulan PSRepository'nin varsayılan depo olmasını istiyorsanız, diğer tüm PSRepositories kaydını kaldırmanız gerekir. Örnek:

Unregister-PSRepository -Name PSGallery

Not

'PSGallery' depo adı PowerShell Galerisi tarafından kullanılmak üzere ayrılmıştır. PSGallery kaydını silebilirsiniz, ancak psGallery adını başka bir depo için yeniden kullanamazsınız.

PSGallery'yi geri yüklemeniz gerekiyorsa aşağıdaki komutu çalıştırın:

Register-PSRepository -Default

Yerel depoda yayımlama

Yerel PSRepository'yi kaydettikten sonra yerel PSRepository'nizde yayımlayabilirsiniz. İki ana yayımlama senaryosu vardır: kendi modülünüzü yayımlama ve PSGallery'den bir modül yayımlama.

Oluşturduğunuz bir modülü yayımlama

modülünüzü, PowerShell Galerisi olduğu gibi yerel PSRepository'nizde yayımlamak için ve Publish-Script kullanınPublish-Module.

  • Kodunuzun konumunu belirtin
  • API anahtarı sağlama
  • Depo adını belirtin. Örneğin, -PSRepository LocalPSRepo

Not

NuGet sunucusunda bir hesap oluşturmanız ve ardından API anahtarını oluşturup kaydetmek için oturum açmanız gerekir. Dosya paylaşımı için, NuGetApiKey değeri için boş olmayan herhangi bir dize kullanın.

Örnekler:

# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
    Path = 'c:\projects\MyModule'
    Repository = 'LocalPsRepo'
    NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat

Önemli

Güvenliği sağlamak için, API anahtarları betiklerde sabit kodlanmış olmamalıdır. Güvenli bir anahtar yönetim sistemi kullanın. Bir komutu el ile yürütürken, günlüğe kaydedilmesini önlemek için API anahtarları düz metin olarak geçirilmemelidir; cmdlet, Read-Host API anahtarının değerini güvenli bir şekilde geçirmek için kullanılabilir.

# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
    Path = 'c:\projects\MyModule'
    Repository = 'LocalPsRepo'
    NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat

PSGallery'den modül yayımlama

PSGallery'den yerel PSRepository'nize bir modül yayımlamak için cmdlet'ini Save-Package kullanabilirsiniz.

  • Paketin Adını Belirtin
  • Sağlayıcı olarak 'NuGet' belirtin
  • Kaynak olarak PSGallery konumunu belirtin (https://www.powershellgallery.com/api/v2)
  • Yerel Deponuzun yolunu belirtin

Örnek:

# Publish from the PSGallery to your local Repository
$savePackageSplat = @{
    Name = 'PackageName'
    ProviderName = 'NuGet'
    Source = 'https://www.powershellgallery.com/api/v2'
    Path = '\\localhost\PSRepoLocal\'
}
Save-Package @savePackageSplat

Yerel PSRepository'niz web tabanlıysa, yayımlamak için kullanan nuget.exe ek bir adım gerektirir. nuget.exekullanma belgelerine bakın.

PowerShellGet'i bağlantısı kesilmiş bir sisteme yükleme

PowerShellGet'in dağıtılması, sistemlerin İnternet bağlantısının kesilmesini gerektiren ortamlarda zordur. PowerShellGet, ilk kez kullanıldığında en son sürümü yükleyen bir önyükleme işlemine sahiptir. PowerShell Galerisi'daki OfflinePowerShellGetDeploy modülü, bu önyükleme işlemini destekleyen cmdlet'ler sağlar.

Çevrimdışı dağıtımı önyüklemek için şunları yapmanız gerekir:

  • OfflinePowerShellGetİstemsiz bağlı sisteminizi ve bağlantısız sistemlerinizi indirin ve yükleyin
  • Cmdlet'ini kullanarak Save-PowerShellGetForOffline PowerShellGet'i ve İnternet'e bağlı sisteme bağımlılıklarını indirin
  • PowerShellGet'i ve bağımlılıklarını İnternet'e bağlı sistemden bağlantısı kesilmiş sisteme kopyalayın
  • Install-PowerShellGetOffline PowerShellGet'i ve bağımlılıklarını uygun klasörlere yerleştirmek için bağlantısı kesilmiş sistemde öğesini kullanın

Aşağıdaki komutlar, tüm bileşenleri bir klasöre yerleştirmek için kullanılır Save-PowerShellGetForOfflinef:\OfflinePowerShellGet

# Requires -RunAsAdministrator
#Download the OfflinePowerShellGetDeploy to a location that can be accessed
# by both the connected and disconnected systems.
Save-Module -Name OfflinePowerShellGetDeploy -Path 'F:\' -Repository PSGallery
Import-Module F:\OfflinePowerShellGetDeploy

# Put PowerShellGet somewhere locally
Save-PowerShellGetForOffline -LocalFolder 'F:\OfflinePowerShellGet'

Bu noktada, içeriğini F:\OfflinePowerShellGet bağlantısız sistemlerinizin kullanımına sunmalısınız. PowerShellGet'i Install-PowerShellGetOffline bağlantısı kesilmiş sisteme yüklemek için cmdlet'ini çalıştırın.

Not

Bu komutları çalıştırmadan önce PowerShellGet'i PowerShell oturumunda çalıştırmamanız önemlidir. PowerShellGet oturuma yüklendikten sonra bileşenler güncelleştirilemez. PowerShellGet'i yanlışlıkla başlatırsanız PowerShell'i kapatın ve yeniden başlatın.

Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

Bu komutları çalıştırdıktan sonra PowerShellGet'i yerel deponuzda yayımlamaya hazır olursunuz.

# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
    Path = 'F:\OfflinePowershellGet'
    Repository = 'LocalPsRepo'
    NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat

Önemli

Güvenliği sağlamak için API anahtarlarının betiklere sabit kodlanmış olmaması gerekir. Güvenli bir anahtar yönetim sistemi kullanın. Bir komutu el ile yürütürken, API anahtarlarının günlüğe kaydedilmesini önlemek için düz metin olarak geçirilmemesi gerekir. Cmdlet, Read-Host API anahtarının değerini güvenli bir şekilde geçirmek için kullanılabilir.

# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
    Path = 'F:\OfflinePowerShellGet'
    Repository = 'LocalPsRepo'
    NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat

PowerShellGet depolarını barındırmak için Paketleme çözümlerini kullanma

Özel veya genel bir PowerShellGet deposunu barındırmak için Azure Artifacts gibi paketleme çözümlerini de kullanabilirsiniz. Daha fazla bilgi ve yönergeler için Azure Artifacts belgelerine bakın.