Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 PowerShell 6.0 of hoger om ervoor te zorgen dat u beschikt over de vereiste PowerShellGet-versie die nodig is voor het installeren van PSResourceGet.
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, selecteerAangepast gedefinieerd , en selecteer vervolgensVerpakking Lezen, schrijven & 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.psd1Open uw PowerShell-Demo.psd1-bestand en zoek de
RootModulevariabele. 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
FunctionsToExportsectie geeft aan welke functies toegankelijk zijn voor gebruikers wanneer ze uw module importeren. Uw PowerShell-Demo-functie opnemen:FunctionsToExport = @('PowerShell-Demo')Zoek de
FileListsectie, 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')Om te controleren of de kluis en het geheim succesvol zijn gemaakt, voert u de volgende opdracht uit om al uw geheimen weer te geven:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVaultVoer de volgende opdracht uit om uw PowerShell-opslagplaats te registreren. U kunt de
SourceLocationkoppeling vinden door te navigeren naar Artifacts>Connect to Feed>NuGet.exe, onder de sectie Project setup bron-URL.Projectspecifieke feed
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfoFeed op organisatieniveau
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Aanbeveling
Voor sommige versies van PowerShell moet mogelijk een nieuwe sessie worden gestart na het uitvoeren van de
Register-PSResourceRepositorycmdlet om te voorkomen dat de waarschuwing "Unable to resolve package source" verschijnt.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. Vervang de tijdelijke aanduidingen door het pakketpad, de naam van de opslagplaats, het referentieobject dat u eerder hebt gemaakt en geef een willekeurige tekenreeks op voor de ApiKey.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Voorbeeld:
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -Credential $credentials -ApiKey az -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> -verboseVoer de volgende opdracht uit om de nieuwste stabiele versie van uw module te installeren:
Install-PSResource <MODULE_NAME>
Aanbeveling
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 Azure Artifacts-aanmeldgegevensprovider.
Installeer Windows MSBuild met een van de volgende opties:
Installeer de NuGet(.exe) versie 4.8.0.5385 of hoger.
Installeer de dotnet runtime versie 8.0.x of hoger.
Installeer PowerShell 6.0 of hoger om ervoor te zorgen dat u over de juiste PowerShellGet - en PackageManagement-versies beschikt.
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, selecteerAangepast gedefinieerd , en selecteer vervolgensVerpakking Lezen, schrijven & 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.psd1Open het bestand Get-Hello.psd1 en zoek de
RootModulevariabele. 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
FunctionsToExportsectie geeft aan welke functies toegankelijk zijn voor gebruikers wanneer ze uw module importeren. Neem de functie Get-Hello op:FunctionsToExport = @('Get-Hello')Zoek de
FileListsectie, 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-HelloVoer de volgende opdracht uit om uw module te verpakken:
nuget pack Get-Hello.nuspecVoer 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 op organisatieniveau
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>"Projectspecifieke feed
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 authenticeren met een feed als een PowerShell-repository en het gebruiken 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 kunt de
SourceLocationkoppeling vinden door te navigeren naar Artifacts>Connect to Feed>NuGet.exe, onder de sectie Project setup bron-URL.Projectspecifieke feed
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 $credsAzureDevopsServicesFeed op organisatieniveau
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
Aanbeveling
Voor sommige versies van PowerShell moet mogelijk een nieuwe sessie worden gestart na het uitvoeren van de
Register-PSRepositorycmdlet om te voorkomen dat de waarschuwing "Unable to resolve package source" verschijnt.Registreer uw pakketbron:
Projectspecifieke feed
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 $credsAzureDevopsServicesFeed op organisatieniveau
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-PSRepositoryVoer 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'