Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Servizi di Azure DevOps
Azure Artifacts offre una soluzione pratica per la condivisione di script di PowerShell. Usando i feed di Azure Artifacts, è possibile pubblicare facilmente i moduli di PowerShell dalla riga di comando e controllare l'accesso tramite le impostazioni del feed. Questo articolo illustra come configurare il feed di Azure Artifacts come repository di PowerShell privato per archiviare e condividere i moduli di PowerShell.
In questo articolo si apprenderà come:
- Creare un token di accesso personale
- Creare un modulo di PowerShell
- Creare un vault SecretStore e registrare un repository
- Pubblicare e utilizzare pacchetti da un feed
Prerequisiti
Creare un'organizzazione Azure DevOps e un progetto, se non è già stato fatto.
Crea un nuovo feed se non ne hai già uno.
Installare PowerShell 6.0 o versione successiva per assicurarsi di avere la versione necessaria per installare PSResourceGet.
Installare PSResourceGet.
Installare i moduli SecretManagement e SecretStore .
Nota
Il provider di credenziali di Azure Artifacts non è supportato con PSResourceGet.
Creare un token di accesso personale
Un token di accesso personale funge da identità digitale e funge da password alternativa per autenticare l'utente con Azure DevOps.
Accedi alla tua organizzazione di Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/
Selezionare l'icona delle impostazioni utente, selezionare Token di accesso personali e quindi nuovo token.
Immettere un nome per il PAT, impostare una data di scadenza, selezionare Impostazioni personalizzate e quindi selezionare Confezionamento>Lettura, scrittura e gestione.
Al termine, selezionare Crea e assicurarsi di copiare e archiviare il PAT in una posizione sicura.
Creare un modulo di PowerShell
Se non si ha un modulo personalizzato, seguire le istruzioni riportate in questa sezione per creare un modulo di PowerShell di esempio. In caso contrario, passare al passaggio successivo:
Creare una nuova cartella PowerShell-Demo. Passare alla cartella e creare un nuovo file PowerShell-Demo.psm1.
Incollare lo script seguente nel file PowerShell-Demo.psm1 :
Function PowerShell-Demo{ Write-Host "Hello World!" }
Generare il manifesto del modulo eseguendo il comando seguente nella directory PowerShell-Demo :
New-ModuleManifest -Path .\PowerShell-Demo.psd1
Aprire il file PowerShell-Demo.psd1 e individuare la
RootModule
variabile. Questa impostazione specifica il file di script principale caricato da PowerShell quando viene importato il modulo. Sostituire la stringa vuota con il percorso del file PowerShell-Demo.psm1 :RootModule = 'PowerShell-Demo.psm1'
La
FunctionsToExport
sezione specifica quali funzioni sono accessibili agli utenti quando importano il modulo. Includere la funzione PowerShell-Demo :FunctionsToExport = @('PowerShell-Demo')
Individuare la
FileList
sezione che elenca i file inclusi durante la creazione del pacchetto del modulo. Aggiungere il file che si desidera includere nel modulo.FileList = @('./PowerShell-Demo.psm1')
Registrare un repository
Eseguire il comando seguente per creare un oggetto credenziale. Sostituire i segnaposto con le informazioni corrette.
$username = "<USER_NAME>" $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
Assicurarsi che SecretManagement e SecretStore siano installati, quindi eseguire il comando seguente per creare un archivio e aggiungere un segreto:
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')
Per verificare se il deposito e il segreto sono stati creati correttamente, eseguire il comando seguente per elencare tutti i tuoi segreti:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVault
Eseguire il comando seguente per registrare il repository di PowerShell. Per trovare il
SourceLocation
collegamento, navigare fino a Artifacts>Connect to Feed>NuGet.exe, nella sezione Impostazione del progetto> URL di origine.Feed limitato al progetto
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 con ambito limitato all'organizzazione
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Suggerimento
Alcune versioni di PowerShell potrebbero richiedere l'avvio di una nuova sessione dopo l'esecuzione del
Register-PSResourceRepository
cmdlet per impedire che venga visualizzato l'avviso Impossibile risolvere l'origine del pacchetto.Per verificare se il repository è stato registrato correttamente, eseguire il comando seguente per recuperare tutti i repository registrati per l'utente corrente:
Get-PSResourceRepository
Nota
Se si verifica l'errore: Il codice di stato della risposta non indica l'esito positivo: 404 (Non trovato). Assicurarsi che l'URL di nuget/v3/index.json
origine punti a anziché a nuget/v2
.
Pubblicare un pacchetto
Eseguire il comando seguente per pubblicare il pacchetto nel feed. Sostituisci i segnaposto con il percorso del pacchetto, il nome del repository, l'oggetto credenziali creato in precedenza e fornisci una qualsiasi stringa per l'ApiKey.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Esempio:
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'
Installare un pacchetto
Per verificare se il modulo è disponibile nel repository, usare il comando seguente per cercarlo:
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
Eseguire il comando seguente per installare la versione stabile più recente del modulo:
Install-PSResource <MODULE_NAME>
Suggerimento
Se si incontra l'errore: Eccezione che chiama "WriteObject"., avvia una nuova finestra di PowerShell ed esegui Get-SecretInfo
. Inserire la password dell'insieme di credenziali prima di eseguire Find-PSResource e Install-PSResource, perché il periodo di timeout di SecretStore può scadere. Il valore predefinito passwordTimeout è 900 secondi, ma è possibile modificare questo valore in base alle esigenze. Per altri dettagli, vedere Usare SecretStore in automazione .
In questo articolo si apprenderà come:
- Creare un token di accesso personale
- Creare, impacchettare e pubblicare un modulo di PowerShell
- Collegati a un feed utilizzando un repository di PowerShell
- Registrare e installare un modulo di PowerShell con Azure Pipelines
Prerequisiti
Creare un'organizzazione Azure DevOps e un progetto, se non è già stato fatto.
Crea un nuovo feed se non ne hai già uno.
Installare il provider di credenziali di Azure Artifacts.
Installare Windows MSBuild usando una delle opzioni seguenti:
Installare la versione
NuGet(.exe) 4.8.0.5385 o successiva.Installa il runtime dotnet versione 8.0.x o successiva.
Installare PowerShell 6.0 o versione successiva per garantire di avere le versioni appropriate di PowerShellGet e PackageManagement.
Creare un token di accesso personale
Un token di accesso personale funge da identità digitale e funge da password alternativa per autenticare l'utente con Azure DevOps.
Accedi alla tua organizzazione di Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/
Selezionare l'icona delle impostazioni utente, selezionare Token di accesso personali e quindi nuovo token.
Immettere un nome per il PAT, impostare una data di scadenza, selezionare Impostazioni personalizzate e quindi selezionare Confezionamento>Lettura, scrittura e gestione.
Al termine, selezionare Crea e assicurarsi di copiare e archiviare il PAT in una posizione sicura.
Creare un modulo di PowerShell
Se non si ha un modulo personalizzato, seguire le istruzioni riportate in questa sezione per creare un modulo di PowerShell di esempio. In caso contrario, passare al passaggio successivo:
Creare una nuova cartella Get-Hello. Passare alla cartella e creare un nuovo file Get-Hello.psm1.
Incollare lo script seguente nel file Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }
Generare il manifesto del modulo eseguendo il comando seguente nella directory Get-Hello :
New-ModuleManifest -Path .\Get-Hello.psd1
Aprire il file Get-Hello.psd1 e individuare la
RootModule
variabile. Questa impostazione specifica il file di script principale caricato da PowerShell quando viene importato il modulo. Sostituire la stringa vuota con il percorso del file Get-Hello.psm1 :RootModule = 'Get-Hello.psm1'
La
FunctionsToExport
sezione specifica quali funzioni sono accessibili agli utenti quando importano il modulo. Includere la funzione Get-Hello :FunctionsToExport = @('Get-Hello')
Trovare la
FileList
sezione , che specifica i file inclusi durante la creazione del pacchetto del modulo. Aggiungere il file che si desidera includere nel modulo.FileList = @('./Get-Hello.psm1')
Creare un pacchetto e pubblicare un modulo
Generare un file nuspec per il modulo. Questo comando crea un file Get-Hello.nuspec contenente i metadati necessari per la compressione del modulo:
nuget spec Get-Hello
Eseguire il comando seguente per creare un pacchetto del modulo:
nuget pack Get-Hello.nuspec
Eseguire il comando seguente per aggiungere l'URL dell'origine del feed. Assicurarsi di usare V2 nell'URL dell'origine del feed, perché NuGet V3 non è supportato.
Feed con ambito organizzazione:
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 con ambito di progetto:
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>"
Pubblicare il pacchetto nel feed:
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Importante
Il numero di versione nel Module Manifest (.psd1) deve essere identico al numero di versione nel file .nuspec.
Connettersi a un feed come repository di PowerShell
Questa sezione illustra come eseguire l'autenticazione con un feed come repository di PowerShell e usare un modulo ospitato nel feed:
In una finestra del prompt di PowerShell eseguire il comando seguente per configurare le credenziali. Sostituire i segnaposto con le informazioni appropriate.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Registrare il repository di PowerShell. Per trovare il
SourceLocation
collegamento, navigare fino a Artifacts>Connect to Feed>NuGet.exe, nella sezione Impostazione del progetto> URL di origine.Feed con ambito progetto:
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 con ambito organizzativo:
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
Suggerimento
Alcune versioni di PowerShell potrebbero richiedere l'avvio di una nuova sessione dopo l'esecuzione del
Register-PSRepository
cmdlet per impedire che venga visualizzato l'avviso Impossibile risolvere l'origine del pacchetto.Registrare l'origine del pacchetto:
Feed a livello di progetto
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 a livello organizzativo:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Nota
- Register-PSRepository: usato per registrare un repository di PowerShell per trovare e installare i moduli.
- Register-PackageSource: usato per registrare un'origine del pacchetto per trovare e pubblicare pacchetti.
Per verificare se il repository è stato registrato correttamente, eseguire il comando seguente per recuperare tutti i repository registrati per l'utente corrente:
Get-PSRepository
Eseguire il comando seguente per installare il modulo Get-Hello .
Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
Nota
Se l'organizzazione usa un firewall o un server proxy, assicurarsi di consentire l'accesso agli URL di dominio e agli indirizzi IP di Azure Artifacts.
Installa un pacchetto dalla pipeline
Questo esempio illustra come eseguire l'autenticazione con un feed di Azure Artifacts e installare un modulo di PowerShell dalla pipeline. Per usare il token di accesso personale, aggiungerlo come variabile della pipeline, come illustrato di seguito:
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline, selezionare la definizione della pipeline e quindi selezionare Modifica per modificare la pipeline.
Selezionare Variabili nell'angolo in alto a destra e quindi selezionare Nuova variabile.
Immettere un nome per la variabile e quindi incollare il token di accesso personale nella casella di testo Valore .
Assicurati di selezionare la casella di controllo Mantieni questo valore segreto. Al termine, selezionare OK .
Aggiungere una seconda variabile per userName. Inserisci un Nome per la tua variabile, quindi immetti il tuo userName nella casella di testo Valore.
Al termine, seleziona Salva.
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'