public/Update-ChocolateySources.ps1
function Update-ChocolateySources() { Param( [PsCustomObject] $Config ) Write-Banner <# { install: "C:/apps" sources: { "feed1": "string", "feed2": { uri: "string" encrypted: true }, "feed3": { uri: "string" user: true password: true } "feed4": { remove: true} } } #> $choco = Get-Command choco -ErrorAction SilentlyContinue if(!$choco) { return; } $choco = $choco.Path; if($Config.sources) { $sources = & $choco source $Config.sources | Get-Member -MemberType NoteProperty | ForEach-Object { $name = $_.Name $found = $false; $update = $false; $set = $Config.sources.$name $feed = $set; $user = $null; $password = $null; $remove = $false; if($feed -is [boolean]) { if($feed -eq $false) { $remove =$true; } } if(! ($feed -is [string])) { $feed = $set.uri $remove = $set.remove; if($set.user) { $user = $set.user; } if($set.password) { $password = $set.password; } if($set.encrypted) { $canEncrypt = $null -ne (Get-Command Unprotect-String -ErrorAction SilentlyContinue) if(!$canEncrypt) { Write-Warning "Skip source $($name): Unprotected-String is missing" continue; } $decryptKey = Get-ChocolateyDecryptKey if(!$decryptKey) { Write-Warning "Skip source $($name): The decrypt key required to decrypt values is missing"; continue; } $feed = Unprotect-String -PrivateKey $decryptKey -EncryptedValue $feed if($set.password) { $password = Unprotect-String -PrivateKey $decryptKey -EncryptedValue ($set.password) } } } foreach($line in $sources) { if($line -match $name) { $found = $true; if($line -match $feed) { break; } $update = $true; } } if($found -and $remove) { Write-Host "Chocolatey: Remove Source $name" Write-Host "----------------------------------------------------------" choco source remove -n="$name" Write-Host "" return; } if($found -and !$update) { return; } if(!$found) { Write-Host "Chocolatey: Add Source $name" Write-Host "----------------------------------------------------------" } if($update) { Write-Host "Chocolatey: Update Source $name" Write-Host "----------------------------------------------------------" choco source remove -n="$name" } if($user) { choco source add -n="$name" -s="$feed" -u=$user -p="$password" } else { choco source add -n="$name" -s="$feed" } Write-Host "" } } } |