Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Parse input argument string into a hashtable
- # Format: /InstallPath:path location /Features:Microsoft.VisualStudio.Workload.CoreEditor,Microsoft.VisualStudio.Workload.ManagedDesktop /ProductKey:AB-D1
- function Parse-Parameters ($s)
- {
- $parameters = @{ }
- if (!$s)
- {
- Write-Debug "No package parameters."
- return $parameters
- }
- Write-Debug "Package parameters: $s"
- $s = ' ' + $s
- [String[]] $kvpPrefix = @(" /")
- $kvpDelimiter = ':'
- $kvps = $s.Split($kvpPrefix, [System.StringSplitOptions]::RemoveEmptyEntries)
- foreach ($kvp in $kvps)
- {
- Write-Debug "Package parameter kvp: $kvp"
- $delimiterIndex = $kvp.IndexOf($kvpDelimiter)
- if (($delimiterIndex -le 0) -or ($delimiterIndex -ge ($kvp.Length - 1))) { continue }
- $key = $kvp.Substring(0, $delimiterIndex).Trim().ToLower()
- if ($key -eq '') { continue }
- $value = $kvp.Substring($delimiterIndex + 1).Trim()
- Write-Debug "Package parameter: key=$key, value=$value"
- $parameters.Add($key, $value)
- }
- return $parameters
- }
- function Generate-Install-Arguments-String ($parameters)
- {
- $s = "--includeRecommended --quiet --norestart --wait"
- $s += " --addProductLang en-US --add Microsoft.VisualStudio.Workload.CoreEditor"
- # --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NetCoreTools --add Microsoft.VisualStudio.Workload.NetWeb
- $features = $parameters['Features']
- if ($features)
- {
- foreach ($f in $features.Split(','))
- {
- $s += " --add "
- $s += $f.Trim()
- }
- }
- $rpp = '& "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\StorePID.exe"'
- $ip = $parameters['InstallPath']
- if ($ip)
- {
- $s += " --installPath `"$ip`""
- $rpp = "& `"$($ip.Trim('\'))" + "\Common7\IDE\StorePID.exe`""
- }
- $pk = $parameters['ProductKey']
- if ($pk)
- {
- $s += " --productKey $pk"
- $parameters.Add('RegisterProduct', "$rpp $pk 08860")
- }
- return $s
- }
- $vendor = "microsoft"
- $product = "visualstudio"
- $packageName = $env:chocolateyPackageName
- $packageParameters = Parse-Parameters $env:chocolateyPackageParameters
- $silentArgs = Generate-Install-Arguments-String $packageParameters
- $uncPath = "\\SERVER\tools\microsoft\visualstudio\2017\mu_visual_studio_enterprise_2017_x86_x64_10049783"
- $uncUser = "DOMAIN\user"
- $uncPassword = "password"
- $driveLetter = dir function:[d-z]: -n | ?{ !(test-path $_) } | random
- NET USE $driveLetter /D 2>null
- NET USE $driveLetter $uncPath /u:$uncUser $uncPassword
- $packageArgs = @{
- packageName = $packageName
- fileType = 'exe'
- file = "$driveLetter\mu_visual_studio_enterprise_2017_x86_x64_10049783.exe"
- silentArgs = $silentArgs
- validExitCodes= @(0, 3010)
- }
- Write-Debug "Arguments used for $packageName`: $silentArgs"
- Install-ChocolateyInstallPackage @packageArgs
- NET USE $driveLetter /D 2>null
- $rp = $packageParameters['RegisterProduct']
- if ($rp)
- {
- Write-Debug "Register product using command line ($rp)"
- Invoke-Expression $rp
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement