Privát PowerShellGet-tárházak használata

A PowerShellGet modul nem a PowerShell-galéria támogatja az adattárakat. Ezek a parancsmagok a következő forgatókönyveket teszik lehetővé:

  • PowerShell-modulok megbízható, előre ellenőrzött készletének támogatása a környezetben való használathoz
  • PowerShell-modulokat vagy szkripteket buildelő CI/CD-folyamat tesztelése
  • PowerShell-szkriptek és -modulok továbbítása olyan rendszerekhez, amelyek nem tudnak hozzáférni az internethez
  • PowerShell-szkriptek és -modulok csak a szervezet számára érhetők el

Ez a cikk bemutatja, hogyan állíthat be helyi PowerShell-adattárat. A cikk a PowerShell-galéria elérhető OfflinePowerShellGetDeploy modult is ismerteti. Ez a modul parancsmagokat tartalmaz a PowerShellGet legújabb verziójának helyi adattárba való telepítéséhez.

Helyi adattártípusok

A helyi PSRepository kétféleképpen hozható létre: NuGet-kiszolgáló vagy fájlmegosztás. Minden típusnak vannak előnyei és hátrányai:

NuGet-kiszolgáló

Előnyök Hátrányok
A PowerShellGallery funkcióinak utánzása A többrétegű alkalmazás üzemeltetéstervezési & támogatást igényel
A NuGet integrálható a Visual Studióval, más eszközökkel Hitelesítési modellre és NuGet-fiókok kezelésére van szükség
A NuGet támogatja a csomagok metaadatait .Nupkg A közzétételhez API-kulcskezelésre & karbantartásra van szükség
Keresési, csomagfelügyeleti stb. szolgáltatásokat nyújt.

Fájlmegosztás

Előnyök Hátrányok
Egyszerű beállítás, biztonsági mentés és karbantartás Az alapszintű fájlmegosztáson kívül nincs felhasználói felület
Egyszerű biztonsági modell – felhasználói engedélyek a megosztáshoz Korlátozott biztonság, és nincs rögzítés arról, hogy ki frissíti a
Nincsenek korlátozások, például meglévő elemek cseréje

A PowerShellGet mindkét típussal működik, és támogatja a verziók és a függőségek telepítését. A PowerShell-galéria működő egyes funkciók azonban nem érhetők el alapSzintű NuGet-kiszolgálókhoz vagy fájlmegosztásokhoz. Nincs különbség a szkriptek, modulok, DSC-erőforrások és szerepkör-képességek között.

NuGet.Server-adattár létrehozása

A következő cikk a saját NuGet-kiszolgáló beállításának lépéseit sorolja fel.

Kövesse a lépéseket egészen a csomagok hozzáadásáig. A csomagok közzétételének lépéseiről a cikk későbbi részében lesz szó.

Fájlmegosztás-alapú adattárak esetén győződjön meg arról, hogy a felhasználók rendelkeznek a fájlmegosztás elérésére vonatkozó engedélyekkel.

Helyi adattár regisztrálása

Ahhoz, hogy egy adattár használható legyen, regisztrálva kell lennie a Register-PSRepository paranccsal. Az alábbi példákban a InstallationPolicy értékre van állítva Trusted, azzal a feltételezéssel, hogy megbízik a saját adattárában.

# 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

Jegyezze fel a különbséget a két parancs ScriptSourceLocation kezelése között. Fájlmegosztás-alapú adattárak esetén a SourceLocation és a ScriptSourceLocation tulajdonságnak egyeznie kell. Webalapú adattárak esetén ezeknek eltérőnek kell lenniük, ezért ebben a példában egy záró "/" lesz hozzáadva a SourceLocation elemhez.

Ha fájlmegosztási protokollt (például NFS-t vagy SMB-t) használ, mindenképpen kövesse a protokoll biztonságossá tételéhez ajánlott útmutatást. Az SMB windowsos védelméről további információt az [SMB biztonsági fejlesztései][09] című témakörben talál.

Ha azt szeretné, hogy az újonnan létrehozott PSRepository legyen az alapértelmezett adattár, törölje az összes többi PSRepositories regisztrációját. Például:

Unregister-PSRepository -Name PSGallery

Megjegyzés

A "PSGallery" adattárnév a PowerShell-galéria számára van fenntartva. Megszüntetheti a PSGallery regisztrációját, de a PSGallery nevet nem használhatja újra más adattárakhoz.

Ha vissza kell állítania a PSGalleryt, futtassa a következő parancsot:

Register-PSRepository -Default

Közzététel helyi adattárban

Miután regisztrálta a helyi PSRepository-t, közzéteheti a helyi PSRepository-ben. Két fő közzétételi forgatókönyv létezik: saját modul közzététele és egy modul közzététele a PSGalleryből.

A létrehozott modul közzététele

A és Publish-Script a használatával Publish-Module a modult ugyanúgy teheti közzé a helyi PSRepositoryban, mint a PowerShell-galéria.

  • Adja meg a kód helyét
  • API-kulcs megadásával
  • Adja meg az adattár nevét. Például: -PSRepository LocalPSRepo

Megjegyzés

Létre kell hoznia egy fiókot a NuGet-kiszolgálón, majd be kell jelentkeznie az API-kulcs létrehozásához és mentéséhez. Fájlmegosztás esetén használjon bármilyen nem üres sztringet a NuGetApiKey értékhez.

Példák:

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

Fontos

A biztonság érdekében az API-kulcsokat nem szabad a szkriptekben nehezen kódolt módon megadni. Használjon biztonságos kulcskezelő rendszert. Ha manuálisan hajt végre egy parancsot, az API-kulcsokat nem szabad egyszerű szövegként átadni a naplózás elkerülése érdekében, a Read-Host parancsmag használatával biztonságosan átadható az API-kulcs értéke.

# 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

Modul közzététele a PSGalleryből

Ha közzé szeretne tenni egy modult a PSGalleryből a helyi PSRepository-ba, használhatja a Save-Package parancsmagot.

  • Adja meg a csomag nevét
  • Adja meg a "NuGet" értéket szolgáltatóként
  • Forrásként adja meg a PSGallery helyét (https://www.powershellgallery.com/api/v2)
  • Adja meg a helyi adattár elérési útját

Példa:

# 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

Ha a helyi PSRepository webalapú, a közzétételhez további lépésre nuget.exe van szükség. A nuget.exehasználatához tekintse meg a dokumentációt.

A PowerShellGet telepítése leválasztott rendszerre

A PowerShellGet üzembe helyezése nehéz olyan környezetekben, amelyekben a rendszereknek le kell választaniuk az internetről. A PowerShellGet rendszerindítási folyamattal rendelkezik, amely az első használatkor telepíti a legújabb verziót. A PowerShell-galéria OfflinePowerShellGetDeploy modulja olyan parancsmagokat biztosít, amelyek támogatják ezt a rendszerindítási folyamatot.

Offline üzemelő példány indításához a következőket kell elvégeznie:

  • Töltse le és telepítse az OfflinePowerShellGetDeploy internetkapcsolattal rendelkező rendszert és a leválasztott rendszereket
  • Töltse le a PowerShellGetet és annak internetkapcsolattal rendelkező rendszerfüggőségeit a Save-PowerShellGetForOffline parancsmag használatával
  • A PowerShellGet és függőségeinek másolása az internethez csatlakoztatott rendszerről a leválasztott rendszerre
  • Install-PowerShellGetOffline A leválasztott rendszeren lévő paranccsel helyezze a PowerShellGetet és annak függőségeit a megfelelő mappákba

Az alábbi parancsokkal Save-PowerShellGetForOffline az összes összetevőt egy mappába helyezheti 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'

Ezen a ponton elérhetővé kell tennie a tartalmát F:\OfflinePowerShellGet a leválasztott rendszerek számára. Futtassa a parancsmagot a Install-PowerShellGetOffline PowerShellGet leválasztott rendszerre való telepítéséhez.

Megjegyzés

Fontos, hogy a parancsok futtatása előtt ne futtassa a PowerShellGetet a PowerShell-munkamenetben. Miután betöltötte a PowerShellGetet a munkamenetbe, az összetevők nem frissíthetők. Ha véletlenül indítja el a PowerShellGetet, lépjen ki, és indítsa újra a PowerShellt.

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

A parancsok futtatása után készen áll a PowerShellGet közzétételére a helyi adattárban.

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

Fontos

A biztonság érdekében az API-kulcsokat nem szabad a szkriptekben szigorúan kódolt módon megadni. Használjon biztonságos kulcskezelő rendszert. A parancs manuális végrehajtásakor az API-kulcsokat nem szabad egyszerű szövegként átadni, hogy elkerülje a naplózást, a Read-Host parancsmag használatával biztonságosan átadható az API-kulcs értéke.

# 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

Csomagolási megoldások használata PowerShellGet-adattárak üzemeltetéséhez

Az Azure Artifactshez hasonló csomagolási megoldásokkal privát vagy nyilvános PowerShellGet-adattárat is üzemeltethet. További információkért és útmutatásért tekintse meg az Azure Artifacts dokumentációját.