Ö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 Trusted
gü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-PowerShellGetForOffline
f:\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.
PowerShell Gallery