Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
06bd49d
Search all known hosts, support multiple template patterns
jwittner Feb 15, 2018
3dcc6f1
Skip tags, we don't use them this way, yet.
jwittner Feb 16, 2018
b1da70c
Merge pull request #52 from jwittner/dev/noTagBuilds
derekfreed Feb 16, 2018
7e9ebb7
Merge pull request #44 from jwittner/dev/findInstallerUpgrades
derekfreed Feb 21, 2018
0f649e2
Adds a validated set for unity build targets when starting editor
derekfreed Feb 26, 2018
0590bd0
Merge pull request #56 from derekfreed/dev/buildTargetSet
jwittner Feb 26, 2018
31643d1
Adds ability to import packages with start-unityeditor
derekfreed Feb 26, 2018
34ae4f9
Merge pull request #57 from derekfreed/dev/importPackage
jwittner Feb 26, 2018
2909fe2
Use basic parsing to avoid IE dependency
jwittner Feb 27, 2018
256e22c
Merge pull request #58 from jwittner/fix/parsingIEDependency
derekfreed Feb 27, 2018
bbbf982
Update examples to reflect reality
jwittner Mar 2, 2018
9abefbe
Drop examples installer support
jwittner Mar 2, 2018
d73ee27
Write error for missing explicit version
jwittner Mar 2, 2018
46d554b
Merge pull request #62 from jwittner/fix/wrongExamples
derekfreed Mar 2, 2018
3a0a553
Merge pull request #64 from jwittner/fix/startUnityNoErrorBadVersion
derekfreed Mar 2, 2018
45b666f
Merge pull request #63 from jwittner/fix/examplesInstaller
derekfreed Mar 2, 2018
e34a881
Bump the major version to reflect API changes
jwittner Mar 2, 2018
727c9e8
Support for Components on UnitySetupInstance
jwittner Mar 2, 2018
bfe10b2
Fixup readme for recent updates
jwittner Mar 2, 2018
f9a8ad8
Support for default Hub installs
jwittner Mar 2, 2018
3c64a95
Add aliases for commands commonly ran from the terminal
jwittner Mar 3, 2018
88c3cc2
Merge pull request #68 from jwittner/dev/unityHubSupport
jwittner Mar 3, 2018
9eb75f2
Merge pull request #65 from jwittner/dev/versionBump
derekfreed Mar 5, 2018
d680cef
Merge pull request #67 from jwittner/dev/detectInstalledComponents
derekfreed Mar 5, 2018
fddac5b
Merge pull request #69 from jwittner/dev/aliases
derekfreed Mar 5, 2018
317ef6b
Write a warning if a component is not found
jwittner Mar 5, 2018
6c39035
Merge pull request #70 from jwittner/dev/warnOnMissingComponents
derekfreed Mar 5, 2018
58c29ca
Explicit filter here for gallery discovery
jwittner Mar 6, 2018
5129fd5
Merge pull request #71 from jwittner/fix/exportYamlCmdlets
jwittner Mar 6, 2018
c8145c5
Another attempt at exports
jwittner Mar 7, 2018
b7a7142
Merge pull request #72 from jwittner/fix/exportYamlCmdlets
jwittner Mar 7, 2018
0de5a4f
Use install folder for setup instance path
jwittner Mar 7, 2018
a276a98
Merge pull request #74 from jwittner/fix/unitySetupPath
derekfreed Mar 7, 2018
a7f9f6d
Better support for UnitySetupComponent
jwittner Mar 7, 2018
75285dc
Update paths in example
jwittner Mar 12, 2018
9037f8e
Added xUnity DSC Resource
jwittner Mar 7, 2018
a4c66a8
Fix get Ensure value
jwittner Mar 12, 2018
754be07
Merge pull request #75 from jwittner/dev/dscResource
derekfreed Mar 12, 2018
df0b7a6
Merge pull request #76 from jwittner/fix/readmeExamples
derekfreed Mar 12, 2018
f8dbc9d
Apply VS Code Format Document
jwittner Mar 19, 2018
e9b1626
Disable warning for this method
jwittner Mar 19, 2018
e14aee7
Merge pull request #77 from jwittner/dev/formatting
derekfreed Mar 20, 2018
6ead389
Merge pull request #78 from jwittner/fix/lintFailure
derekfreed Mar 20, 2018
bcf0a9b
Change helper to better name
jwittner Mar 20, 2018
c0d6cdf
Merge pull request #80 from jwittner/fix/lintFailure
derekfreed Mar 20, 2018
4958ef4
Dont force and specify version
jwittner Mar 21, 2018
17a8ad5
Improve alias handling
jwittner Mar 21, 2018
4987d05
Convert to utf-8
jwittner Mar 21, 2018
2daf16a
Rename to xUnitySetupInstance
jwittner Mar 21, 2018
047af9c
Merge pull request #81 from jwittner/fix/yamlImport
derekfreed Mar 28, 2018
9fa4c8b
Merge pull request #82 from jwittner/fix/aliasReimportFailure
derekfreed Mar 28, 2018
43386b8
Merge pull request #86 from jwittner/fix/dscResourceName
derekfreed Mar 28, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 43 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,25 @@ Install-Module UnitySetup -Scope CurrentUser

## Using

### Cmdlets
Find all of your Unity installs:
```powershell
Get-UnitySetupInstance

# Example output:
# InstallationVersion InstallationPath
# ------------------- ----------------
# 2017.2.1f1 C:\Program Files\Unity-2017.2.1f1\Editor\
# 2017.1.0p5 C:\Program Files\Unity.2017.1.0p5\Editor\
# 2017.1.1f1 C:\Program Files\Unity.2017.1.1f1\Editor\
# 2017.1.1p3 C:\Program Files\Unity.2017.1.1p3\Editor\
# 2017.2.0f3 C:\Program Files\Unity.2017.2.0f3\Editor\
# 2017.3.0f3 C:\Program Files\Unity.2017.3.0f3\Editor\
# 5.5.4p3 C:\Program Files (x86)\Unity.5.5.4p3\Editor\
# Version Components Path
# ------- ---------- ----
# 2017.1.2f1 Setup, Metro, UWP_IL2CPP C:\Program Files\Unity-2017.1.2f1\
# 2017.1.3f1 Setup, Metro, UWP_IL2CPP C:\Program Files\Unity-2017.1.3f1\
# 2017.2.1f1 Setup, Metro, UWP_IL2CPP C:\Program Files\Unity-2017.2.1f1\
# 2017.3.1f1 Setup, Metro, UWP_IL2CPP, Linux, Vuforia C:\Program Files\Unity-2017.3.1f1\
# 2018.1.0b4 Setup, Metro, UWP_IL2CPP, Vuforia C:\Program Files\Unity-2018.1.0b4\
# 2018.1.0b8 All C:\Program Files\Unity-2018.1.0b8\
# 2017.1.0p5 Setup, Metro, UWP_IL2CPP C:\Program Files\Unity.2017.1.0p5\
# 2017.1.1f1 Setup, Metro, UWP_IL2CPP C:\Program Files\Unity.2017.1.1f1\
# 2017.1.1p3 Setup, StandardAssets, Metro, UWP_IL2CPP C:\Program Files\Unity.2017.1.1p3\
# 2017.2.0f3 Setup, Metro, UWP_IL2CPP, Vuforia C:\Program Files\Unity.2017.2.0f3\
# 2017.3.0f3 Setup, Metro, UWP_IL2CPP, Mac, Vuforia C:\Program Files\Unity.2017.3.0f3\
```

Select the Unity installs that you want:
Expand All @@ -50,12 +55,12 @@ Find all the Unity projects recursively:
Get-UnityProjectInstance -Recurse

# Example output:
# ProjectPath UnityInstanceVersion
# ----------- --------------------
# C:\Projects\Project1\OneUnity\ 2017.2.0f3
# C:\Projects\Project1\TwoUnity\ 2017.3.0f3
# C:\Projects\Project2\ 2017.1.1p1
# C:\Projects\Project3\App.Unity\ 2017.1.2f1
# Version Path
# ------- ----
# 2017.2.0f3 C:\Projects\Project1\OneUnity\
# 2017.3.0f3 C:\Projects\Project1\TwoUnity\
# 2017.1.1p1 C:\Projects\Project2\
# 2017.1.2f1 C:\Projects\Project3\App.Unity\
```
Launch the right Unity editor for a project:
```powershell
Expand All @@ -78,7 +83,6 @@ Find-UnitySetupInstaller -Version '2017.3.0f3' | Format-Table
# Setup 2017.3.0f3 553688024 2017-12-18 08:15:20 https://netstorage.unity3d.com/unity/...
# Documentation 2017.3.0f3 358911256 2017-12-18 08:18:37 https://netstorage.unity3d.com/unity/...
# StandardAssets 2017.3.0f3 189886032 2017-12-18 08:15:52 https://netstorage.unity3d.com/unity/...
# ExampleProject 2017.3.0f3 258824680 2017-12-18 08:15:39 https://netstorage.unity3d.com/unity/...
# Metro 2017.3.0f3 172298008 2017-12-18 08:17:44 https://netstorage.unity3d.com/unity/...
# UWP_IL2CPP 2017.3.0f3 152933480 2017-12-18 08:17:55 https://netstorage.unity3d.com/unity/...
# Android 2017.3.0f3 194240888 2017-12-18 08:16:06 https://netstorage.unity3d.com/unity/...
Expand Down Expand Up @@ -110,6 +114,29 @@ Find-UnitySetupInstaller -Version '2017.3.0f3' | Install-UnitySetupInstance
Install-UnitySetupInstance -Installers (Find-UnitySetupInstaller -Version '2017.3.0f3')
```

### DSC
UnitySetup includes the xUnitySetupInstance DSC Resource. An example configuration might look like:

```powershell
<#
Install multiple versions of Unity and several components
#>
Configuration Sample_xUnitySetupInstance_Install {

Import-DscResource -ModuleName UnitySetup

Node 'localhost' {

xUnitySetupInstance Unity {
Versions = '2017.3.1f1,2018.1.0b9'
Components = 'Setup', 'Mac', 'Linux', 'Metro', 'iOS'
Ensure = 'Present'
}
}
}
```

See more by perusing the `UnitySetup\Examples` folder.

# Feedback
To file issues or suggestions, please use the [Issues](https://github.com/Microsoft/unitysetup.powershell/issues) page for this project on GitHub.
Expand Down
201 changes: 201 additions & 0 deletions UnitySetup/DSCResources/xUnitySetupInstance/xUnitySetupInstance.psm1
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@

<#
.Synopsis
Returns the status of Unity installs and the set of their overlapping components.
.Parameter Versions
The versions of Unity to test for.
#>
function Get-TargetResource {
[CmdletBinding()]
[OutputType([System.Collections.Hashtable])]
param
(
[parameter(Mandatory = $true)]
[System.String]
$Versions
)
Write-Verbose "Begin executing Get on $Versions"

[string[]]$splitVersions = $Versions -split ',' | ForEach-Object { $_.Trim() }

$setupInstances = Get-UnitySetupInstance | Where-Object { $splitVersions -contains $_.Version }
$result = @{
"Versions" = $setupInstances | Select-Object -ExpandProperty Version | Sort-Object -Unique
"Ensure" = if ($setupInstances.Count -gt 0) { 'Present'} else { 'Absent' }
}

Write-Verbose "Found versions: $($result['Versions'])"

if ( $setupInstances.Count -gt 0 ) {
$components = $setupInstances[0].Components;
for ( $i = 1; $i -lt $setupInstances.Count; $i++) {
$components = $components -band $setupInstances[$i].Components;
}

$result["Components"] = $components
}

$result

Write-Verbose "Found overlapping components: $($result['Components'])"
Write-Verbose "End executing Get on $Versions"
}

<#
.Synopsis
Installs or uninstalls the specified Versions of Unity and corresponding Components.
.Parameter Versions
What versions are we concered with?
.Parameter Ensure
Should we ensure they're there or ensure they're not?
.Parameter Components
What components are we concerned with?
.Notes
Only uninstalls whole versions of Unity. Ensuring components doesn't
mean other components weren't previously installed and aren't still available.
#>
function Set-TargetResource {
[CmdletBinding()]
param
(
[parameter(Mandatory = $true)]
[System.String]
$Versions,

[ValidateSet("Present", "Absent")]
[System.String]
$Ensure = 'Present',

[System.String[]]
$Components = @('All')
)

Write-Verbose "Begin executing Set to Ensure $Versions with $Components are $Ensure"

[string[]]$splitVersions = $Versions -split ',' | ForEach-Object { $_.Trim() }

switch ($Ensure) {
'Present' {
foreach ($version in $splitVersions) {
$findArgs = @{
'Version' = $version
'Components' = ConvertTo-UnitySetupComponent $Components
}

$installArgs = @{ 'Cache' = "$env:TEMP\.unitysetup" }

$setupInstances = Get-UnitySetupInstance | Select-UnitySetupInstance -Version $version
if ($setupInstances.Count -gt 0) {
$findArgs["Components"] = ($findArgs.Components -band (-bnot ($setupInstances[0].Components -band $findArgs.Components)))
$installArgs["Destination"] = $setupInstances[0].Path
}

# No missing components for this version
if ( $findArgs.Components -eq 0 ) {
Write-Verbose "All components of $version were installed"
continue;
}

Write-Verbose "Finding $($findArgs["Components"]) installers for $version"
$installArgs["Installers"] = Find-UnitySetupInstaller @findArgs -WarningAction Stop
if ( $installArgs.Installers.Count -gt 0 ) {
Write-Verbose "Starting install of $($installArgs.Installers.Count) components for $version"
Install-UnitySetupInstance @installArgs
Write-Verbose "Finished install of $($installArgs.Installers.Count) components for $version"
}
}
}
'Absent' {
$setupInstances = Get-UnitySetupInstance | Where-Object { $splitVersions -contains $_.Version }
Write-Verbose "Found $($setupInstances.Count) instance(s) of $splitVersions"

if ( $setupInstances.Count -gt 0 ) {
Write-Verbose "Starting uninstall of $($setupInstances.Count) versions of Unity"
Uninstall-UnitySetupInstance -Instances $setupInstances
Write-Verbose "Finished uninstall of $($setupInstances.Count) versions of Unity"
}
}
}

Write-Verbose "End executing Set to Ensure $Versions with $Components are $Ensure"
}

<#
.Synopsis
Test if the Unity installs are in the desired state.
.Parameter Versions
What versions are we concered with?
.Parameter Ensure
Should we ensure they're there or ensure they're not?
.Parameter Components
What components are we concerned with?
.Notes
This test is not strict. Versions and Components not described are not considered.
#>
function Test-TargetResource {
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
[parameter(Mandatory = $true)]
[System.String]
$Versions,

[ValidateSet("Present", "Absent")]
[System.String]
$Ensure = 'Present',

[System.String[]]
$Components = @('All')
)

Write-Verbose "Begin executing Test to verify $Versions with $Components are $Ensure"

[string[]]$splitVersions = $Versions -split ',' | ForEach-Object { $_.Trim() }

$result = $true
switch ( $Ensure ) {
'Present' {
$setupComponents = ConvertTo-UnitySetupComponent $Components
foreach ($version in $splitVersions) {
Write-Verbose "Starting test for $version"
$setupInstances = Get-UnitySetupInstance | Select-UnitySetupInstance -Version $version
Write-Verbose "Found $($setupInstances.Count) instance(s) of $version"

if ($setupInstances.Count -eq 0) {
Write-Verbose "Found $version missing."
$result = $false
break
}

$availableComponents = ($setupInstances[0].Components -band $setupComponents)
if ($availableComponents -ne $setupComponents) {
$missingComponents = ConvertTo-UnitySetupComponent ($setupComponents -bxor $availableComponents)
Write-Verbose "Found $version missing $($missingComponents)"
$result = $false
break
}
}
}
'Absent' {
foreach ($version in $splitVersions) {
$setupInstances = Get-UnitySetupInstance | Select-UnitySetupInstance -Version $version
Write-Verbose "Found $($setupInstances.Count) instance(s) of $version"

if ($setupInstances.Count -gt 0) {
Write-Verbose "Found $version installed."
$result = $false
break
}
}
}
}

$result

Write-Verbose "End executing Test to verify $Versions with $Components are $Ensure"
}


Export-ModuleMember -Function *-TargetResource

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

[ClassVersion("1.0.0.0"), FriendlyName("xUnitySetupInstance")]
class xUnitySetupInstance : OMI_BaseResource
{
[Key, Description("Comma separated list of Unity versions. ")] string Versions;
[Write, Description("Ensure present or absent?"), ValueMap{"Present","Absent"}, Values{"Present","Absent"}] string Ensure;
[Write, Description("What components to ensure are present?")] string Components[];
};

28 changes: 28 additions & 0 deletions UnitySetup/Examples/Sample_xUnitySetupInstance.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<#
Create a custom configuration by passing in necessary values
#>
Configuration Sample_xUnitySetupInstance {
param
(
[System.String]
$Versions = '2017.3.0f3,2018.1.0b9',

[ValidateSet('Present', 'Absent')]
[System.String]
$Ensure = 'Present',

[System.String[]]
$Components = @('Setup', 'Linux', 'Metro', 'Mac', 'iOS')
)

Import-DscResource -ModuleName UnitySetup

Node 'localhost' {

xUnitySetupInstance Unity {
Versions = $Versions
Components = $Components
Ensure = $Ensure
}
}
}
16 changes: 16 additions & 0 deletions UnitySetup/Examples/Sample_xUnitySetupInstance_Install.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<#
Install multiple versions of Unity and several components
#>
Configuration Sample_xUnitySetupInstance_Install {

Import-DscResource -ModuleName UnitySetup

Node 'localhost' {

xUnitySetupInstance Unity {
Versions = '2017.3.1f1,2018.1.0b9'
Components = 'Setup', 'Mac', 'Linux', 'Metro', 'iOS'
Ensure = 'Present'
}
}
}
15 changes: 15 additions & 0 deletions UnitySetup/Examples/Sample_xUnitySetupInstance_Uninstall.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<#
Uninstall multiple versions of Unity
#>
Configuration Sample_xUnitySetupInstance_Install {

Import-DscResource -ModuleName UnitySetup

Node 'localhost' {

xUnitySetupInstance Unity {
Versions = '2017.3.1f1,2018.1.0b9'
Ensure = 'Absent'
}
}
}
Loading