Een Azure Artifacts-feed gebruiken als een persoonlijke PowerShell-opslagplaats
Azure DevOps Services
Azure Artifacts biedt een handige oplossing voor het delen van PowerShell-scripts. Met behulp van Azure Artifacts-feeds kunt u uw PowerShell-modules naadloos publiceren vanaf de opdrachtregel en de toegang tot deze modules beheren via uw feedinstellingen. In dit artikel wordt u begeleid bij het instellen van uw Azure Artifacts-feed als een persoonlijke PowerShell-opslagplaats om uw PowerShell-modules op te slaan en te delen.
In dit artikel leert u het volgende:
- Een persoonlijk toegangstoken maken
- Een PowerShell-module maken
- Een SecretStore-kluis maken en een opslagplaats registreren
- Pakketten publiceren en gebruiken vanuit een feed
Vereisten
Maak een Azure DevOps-organisatie en een project als u dat nog niet hebt gedaan.
Maak een nieuwe feed als u er nog geen hebt.
Installeer PSResourceGet.
Installeer de modules SecretManagement en SecretStore .
Notitie
Azure Artifacts Credential Provider wordt niet ondersteund met PSResourceGet.
Een persoonlijk toegangstoken maken
Een persoonlijk toegangstoken fungeert als uw digitale identiteit en fungeert als een alternatief wachtwoord om u te verifiëren met Azure DevOps.
Navigeer naar uw Azure DevOps-organisatie
https://dev.azure.com/<ORGANIZATION_NAME>/
Selecteer het pictogram gebruikersinstellingen, selecteer Persoonlijke toegangstokens en selecteer vervolgens Nieuw token.
Voer een naam in voor uw PAT, stel een vervaldatum in, selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven en beheren.
Selecteer Maken wanneer u klaar bent en zorg ervoor dat u uw PAT kopieert en opslaat op een veilige locatie.
Een PowerShell-module maken
Als u geen eigen module hebt, volgt u de instructies in deze sectie om een PowerShell-voorbeeldmodule te maken. Ga anders verder met de volgende stap:
Maak een nieuwe map PowerShell-Demo. Navigeer naar uw map en maak een nieuw bestand PowerShell-Demo.psm1.
Plak het volgende script in uw PowerShell-Demo.psm1-bestand :
Function PowerShell-Demo{ Write-Host "Hello World!" }
Genereer het modulemanifest door de volgende opdracht uit te voeren in de map PowerShell-Demo :
New-ModuleManifest -Path .\PowerShell-Demo.psd1
Open uw PowerShell-Demo.psd1-bestand en zoek de
RootModule
variabele. Met deze instelling geeft u het hoofdscriptbestand op dat door PowerShell wordt geladen wanneer de module wordt geïmporteerd. Vervang de lege tekenreeks door het pad naar uw PowerShell-Demo.psm1-bestand :RootModule = 'PowerShell-Demo.psm1'
De
FunctionsToExport
sectie geeft aan welke functies toegankelijk zijn voor gebruikers wanneer ze uw module importeren. Uw PowerShell-Demo-functie opnemen:FunctionsToExport = @('PowerShell-Demo')
Zoek de
FileList
sectie, waarin de bestanden worden vermeld die zijn opgenomen bij het verpakken van de module. Voeg het bestand toe dat u wilt verpakken met uw module:FileList = @('./PowerShell-Demo.psm1')
Een opslagplaats registreren
Voer de volgende opdracht uit om een referentieobject te maken. Vervang de tijdelijke aanduidingen door de juiste informatie.
$username = "<USER_NAME>" $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
Zorg ervoor dat SecretManagement en SecretStore zijn geïnstalleerd en voer vervolgens de volgende opdracht uit om een kluis te maken en een geheim toe te voegen:
Register-SecretVault -Name "MySecretVault" -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault Set-Secret -Name "MyCredential" -Secret $credentials -Vault "MySecretVault" $CredentialInfo = [Microsoft.PowerShell.PSResourceGet.UtilClasses.PSCredentialInfo]::new('MySecretVault', 'MyCredential')
Als u wilt controleren of de kluis en het geheim zijn gemaakt, voert u de volgende opdracht uit om al uw geheimen weer te geven:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVault
Voer de volgende opdracht uit om uw PowerShell-opslagplaats te registreren. U vindt de
SourceLocation
koppeling door te navigeren naar Artifacts>Connect to Feed>NuGet.exe onder de bron-URL van de projectinstallatiesectie. >Feed met projectbereik:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Feed met organisatiebereik:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Tip
Voor sommige versies van PowerShell moet mogelijk een nieuwe sessie worden gestart nadat de
Register-PSResourceRepository
cmdlet is uitgevoerd om te voorkomen dat er een waarschuwing over pakketbronnen kan worden opgelost.Als u wilt controleren of de opslagplaats is geregistreerd, voert u de volgende opdracht uit om alle geregistreerde opslagplaatsen voor de huidige gebruiker op te halen:
Get-PSResourceRepository
Notitie
Als u de fout krijgt: de antwoordstatuscode geeft niet aan dat het is gelukt: 404 (Niet gevonden)., controleert u of de bron-URL verwijst naar nuget/v3/index.json
in plaats van nuget/v2
.
Een pakket publiceren
Voer de volgende opdracht uit om het pakket naar uw feed te publiceren:
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -ApiKey (Get-Secret <SECRET_NAME>)
Voorbeeld:
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -ApiKey (Get-Secret MyNewCredential) -verbose
VERBOSE: Performing the operation "Publish-PSResource" on target "Publish resource
'C:\AzureDevOps\Demos\PowerShellDemo\scripts\' from the machine".
VERBOSE: The newly created nuspec is:
C:\Users\xxxx\AppData\Local\Temp\xxxxxxxxx\PowerShell-Demo.nuspec
VERBOSE: credential successfully read from vault and set for repository: FabrikamFiberFeed
VERBOSE: Successfully packed the resource into a .nupkg
VERBOSE: Successfully published the resource to
'https://pkgs.dev.azure.com/ramiMSFTDevOps/DemoProject/_packaging/FabrikamFiberFeed/nuget/v3/index.json'
VERBOSE: Deleting temporary directory 'C:\Users\xxxx\AppData\Local\Temp\xxxxxxx'
Een pakket installeren
Als u wilt controleren of de module beschikbaar is in uw opslagplaats, gebruikt u de volgende opdracht om ernaar te zoeken:
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
Voer de volgende opdracht uit om de nieuwste stabiele versie van uw module te installeren:
Install-PSResource <MODULE_NAME>
Tip
Als u de fout krijgt: Uitzondering bij het aanroepen van 'WriteObject'., start een nieuw PowerShell-venster en voer het uit Get-SecretInfo
. Voer uw kluiswachtwoord in voordat u Find-PSResource en Install-PSResource uitvoert, omdat de time-outperiode voor SecretStore kan verlopen. De standaard PasswordTimeout is 900 seconden, maar u kunt deze waarde indien nodig wijzigen. Zie SecretStore gebruiken in automatisering voor meer informatie.
In dit artikel leert u het volgende:
- Een persoonlijk toegangstoken maken
- Een PowerShell-module maken, verpakken en publiceren
- Verbinding maken met een feed als een PowerShell-opslagplaats
- Een PowerShell-module registreren en installeren met behulp van Azure Pipelines
Vereisten
Maak een Azure DevOps-organisatie en een project als u dat nog niet hebt gedaan.
Maak een nieuwe feed als u er nog geen hebt.
Installeer de Referentieprovider van Azure Artifacts.
Installeer NuGet.
Een persoonlijk toegangstoken maken
Een persoonlijk toegangstoken fungeert als uw digitale identiteit en fungeert als een alternatief wachtwoord om u te verifiëren met Azure DevOps.
Navigeer naar uw Azure DevOps-organisatie
https://dev.azure.com/<ORGANIZATION_NAME>/
Selecteer het pictogram gebruikersinstellingen, selecteer Persoonlijke toegangstokens en selecteer vervolgens Nieuw token.
Voer een naam in voor uw PAT, stel een vervaldatum in, selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven en beheren.
Selecteer Maken wanneer u klaar bent en zorg ervoor dat u uw PAT kopieert en opslaat op een veilige locatie.
Een PowerShell-module maken
Als u geen eigen module hebt, volgt u de instructies in deze sectie om een PowerShell-voorbeeldmodule te maken. Ga anders verder met de volgende stap:
Maak een nieuwe map Get-Hello. Navigeer naar uw map en maak een nieuw bestand Get-Hello.psm1.
Plak het volgende script in uw Get-Hello.psm1-bestand :
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }
Genereer het modulemanifest door de volgende opdracht uit te voeren in de map Get-Hello :
New-ModuleManifest -Path .\Get-Hello.psd1
Open het bestand Get-Hello.psd1 en zoek de
RootModule
variabele. Met deze instelling geeft u het hoofdscriptbestand op dat door PowerShell wordt geladen wanneer de module wordt geïmporteerd. Vervang de lege tekenreeks door het pad naar uw Get-Hello.psm1-bestand :RootModule = 'Get-Hello.psm1'
De
FunctionsToExport
sectie geeft aan welke functies toegankelijk zijn voor gebruikers wanneer ze uw module importeren. Neem de functie Get-Hello op:FunctionsToExport = @('Get-Hello')
Zoek de
FileList
sectie, waarmee de bestanden worden opgegeven die zijn opgenomen bij het verpakken van de module. Voeg het bestand toe dat u wilt verpakken met uw module:FileList = @('./Get-Hello.psm1')
Een module verpakken en publiceren
Genereer een nuspec-bestand voor uw module. Met deze opdracht maakt u een Get-Hello.nuspec-bestand met de benodigde metagegevens voor het inpakken van de module:
nuget spec Get-Hello
Voer de volgende opdracht uit om uw module te verpakken:
nuget pack Get-Hello.nuspec
Voer de volgende opdracht uit om de url van de feedbron toe te voegen. Zorg ervoor dat u V2 in uw feedbron-URL gebruikt, omdat NuGet V3 niet wordt ondersteund.
Feed met organisatiebereik:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Feed met projectbereik:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Publiceer het pakket naar uw feed:
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Belangrijk
Het versienummer in het modulemanifest (.psd1) moet identiek zijn aan het versienummer in uw .nuspec-bestand .
Verbinding maken met een feed als een PowerShell-opslagplaats
In deze sectie wordt u begeleid bij het verifiëren met een feed als een PowerShell-opslagplaats en het verbruiken van een module die wordt gehost in uw feed:
Voer in een PowerShell-promptvenster de volgende opdracht uit om uw referenties in te stellen. Vervang de tijdelijke aanduidingen door de juiste informatie.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Registreer uw PowerShell-opslagplaats. U vindt de
SourceLocation
koppeling door te navigeren naar Artifacts>Connect to Feed>NuGet.exe onder de bron-URL van de projectinstallatiesectie. >Feed met projectbereik:
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Feed met organisatiebereik:
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Tip
Voor sommige versies van PowerShell moet mogelijk een nieuwe sessie worden gestart nadat de
Register-PSRepository
cmdlet is uitgevoerd om te voorkomen dat er een waarschuwing over pakketbronnen kan worden opgelost.Registreer uw pakketbron:
Feed met projectbereik:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Feed met organisatiebereik:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Notitie
- Register-PSRepository: wordt gebruikt voor het registreren van een PowerShell-opslagplaats om modules te zoeken en te installeren.
- Register-PackageSource: wordt gebruikt om een pakketbron te registreren voor het zoeken en publiceren van pakketten.
Als u wilt controleren of de opslagplaats is geregistreerd, voert u de volgende opdracht uit om alle geregistreerde opslagplaatsen voor de huidige gebruiker op te halen:
Get-PSRepository
Voer de volgende opdracht uit om de Get-Hello-module te installeren.
Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
Notitie
Als uw organisatie gebruikmaakt van een firewall of een proxyserver, moet u ervoor zorgen dat u toegang krijgt tot DE URL's en IP-adressen van het Azure Artifacts-domein.
Een pakket installeren vanuit uw pijplijn
In dit voorbeeld wordt u begeleid bij het verifiëren met een Azure Artifacts-feed en het installeren van een PowerShell-module vanuit uw pijplijn. Als u uw persoonlijke toegangstoken wilt gebruiken, voegt u het toe als een pijplijnvariabele, zoals hieronder wordt weergegeven:
Meld u aan bij uw Azure DevOps-organisatie en navigeer vervolgens naar uw project.
Selecteer Pijplijnen, selecteer uw pijplijndefinitie en selecteer Vervolgens Bewerken om uw pijplijn te wijzigen.
Selecteer Variabelen in de rechterbovenhoek en selecteer vervolgens Nieuwe variabele.
Voer een naam in voor uw variabele en plak uw persoonlijke toegangstoken in het tekstvak Waarde .
Zorg ervoor dat u het selectievakje Dit waardegeheim behouden inschakelt. Selecteer OK wanneer u klaar bent.
Voeg een tweede variabele toe voor uw gebruikersnaam. Voer een naam in voor uw variabele en voer uw gebruikersnaam in het tekstvak Waarde in.
Kies Opslaan wanneer u klaar bent.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For organization scoped feeds use'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'
steps:
- powershell: |
$pat = ConvertTo-SecureString ${env:pat_token} -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("${env:userName}", $pat)
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted -Credential $credential
displayName: 'Register PSRepository'
env:
pat_token: $patToken
userName: $userName
- powershell: |
nuget install <PACKAGE_NAME> -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json"
displayName: 'Install module'