Share via


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

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.

  1. Navigeer naar uw Azure DevOps-organisatie https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Selecteer het pictogram gebruikersinstellingen, selecteer Persoonlijke toegangstokens en selecteer vervolgens Nieuw token.

  3. Voer een naam in voor uw PAT, stel een vervaldatum in, selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven en beheren.

  4. Selecteer Maken wanneer u klaar bent en zorg ervoor dat u uw PAT kopieert en opslaat op een veilige locatie.

    Een schermopname van het instellen van een nieuw persoonlijk toegangstoken.

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:

  1. Maak een nieuwe map PowerShell-Demo. Navigeer naar uw map en maak een nieuw bestand PowerShell-Demo.psm1.

  2. Plak het volgende script in uw PowerShell-Demo.psm1-bestand :

    Function PowerShell-Demo{
        Write-Host "Hello World!"
    }
    
  3. Genereer het modulemanifest door de volgende opdracht uit te voeren in de map PowerShell-Demo :

    New-ModuleManifest -Path .\PowerShell-Demo.psd1
    
  4. 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'
    
  5. De FunctionsToExport sectie geeft aan welke functies toegankelijk zijn voor gebruikers wanneer ze uw module importeren. Uw PowerShell-Demo-functie opnemen:

    FunctionsToExport = @('PowerShell-Demo')
    
  6. 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

  1. 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)
    
  2. 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')
    
  3. 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
    
    
  4. 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.

  5. 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 schermopname van het PowerShell-demopakket dat is gepubliceerd naar de feed.

Een pakket installeren

  1. 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
    
  2. 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

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.

  1. Navigeer naar uw Azure DevOps-organisatie https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Selecteer het pictogram gebruikersinstellingen, selecteer Persoonlijke toegangstokens en selecteer vervolgens Nieuw token.

  3. Voer een naam in voor uw PAT, stel een vervaldatum in, selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven en beheren.

  4. Selecteer Maken wanneer u klaar bent en zorg ervoor dat u uw PAT kopieert en opslaat op een veilige locatie.

    Een schermopname van het instellen van een nieuw persoonlijk toegangstoken.

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:

  1. Maak een nieuwe map Get-Hello. Navigeer naar uw map en maak een nieuw bestand Get-Hello.psm1.

  2. Plak het volgende script in uw Get-Hello.psm1-bestand :

    Function Get-Hello{
        Write-Host "Hello Azure DevOps!"
    }
    
  3. Genereer het modulemanifest door de volgende opdracht uit te voeren in de map Get-Hello :

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. 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'
    
  5. 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')
    
  6. 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

  1. 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
    
  2. Voer de volgende opdracht uit om uw module te verpakken:

    nuget pack Get-Hello.nuspec
    
  3. 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>"
      
  4. 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:

  1. 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)
    
  2. 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.

  3. 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.
  4. 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
    
  5. 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:

  1. Meld u aan bij uw Azure DevOps-organisatie en navigeer vervolgens naar uw project.

  2. Selecteer Pijplijnen, selecteer uw pijplijndefinitie en selecteer Vervolgens Bewerken om uw pijplijn te wijzigen.

  3. Selecteer Variabelen in de rechterbovenhoek en selecteer vervolgens Nieuwe variabele.

  4. Voer een naam in voor uw variabele en plak uw persoonlijke toegangstoken in het tekstvak Waarde .

  5. Zorg ervoor dat u het selectievakje Dit waardegeheim behouden inschakelt. Selecteer OK wanneer u klaar bent.

  6. Voeg een tweede variabele toe voor uw gebruikersnaam. Voer een naam in voor uw variabele en voer uw gebruikersnaam in het tekstvak Waarde in.

  7. 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'