public/Update-ChocolateySources.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
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 "" } } } |