├── .gitattributes ├── .gitignore ├── 1.1.ps1 ├── Convert-DSCSyntaxToFields.ps1 ├── LICENSE ├── README.md ├── Start-DSCDesigner.ps1 ├── XAML ├── .vs │ └── FoxDeploy DSC Designer │ │ ├── v14 │ │ └── .suo │ │ └── v15 │ │ └── .suo ├── FoxDeploy DSC Designer.sln └── FoxDeployDSCdesigner │ ├── 0.1MainWindow.xaml │ ├── 0.1MainWindow.xaml.cs │ ├── 0.2MainWindow.xaml │ ├── 0.2MainWindow.xaml.cs │ ├── 0.3.backup │ ├── 0.3MainWindow.xaml │ ├── 0.3MainWindow.xaml.cs │ ├── 0.5MainWindow.xaml │ ├── 0.5MainWindow.xaml.cs │ ├── App.config │ ├── App.xaml │ ├── App.xaml.cs │ ├── AutoLoadingDev.xaml │ ├── AutoLoadingDev.xaml.cs │ ├── FoxDeploy DSC Designer.csproj │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings │ ├── TabDesigner.xaml │ ├── TabDesigner.xaml.cs │ ├── bin │ └── Debug │ │ ├── FoxDeployDSC_Designer.exe.config │ │ ├── FoxDeployDSC_Designer.vshost.exe │ │ ├── FoxDeployDSC_Designer.vshost.exe.config │ │ ├── FoxDeployDSC_Designer.vshost.exe.manifest │ │ ├── Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll │ │ ├── Microsoft.VisualStudio.HostingProcess.Utilities.dll │ │ ├── WpfApplication1.exe.config │ │ ├── WpfApplication1.vshost.exe │ │ ├── WpfApplication1.vshost.exe.config │ │ └── WpfApplication1.vshost.exe.manifest │ └── obj │ └── Debug │ ├── 0.1MainWindow.g.i.cs │ ├── 0.2MainWindow.g.i.cs │ ├── 0.3.baml │ ├── 0.3.g.cs │ ├── 0.3.g.i.cs │ ├── 0.3MainWindow.g.i.cs │ ├── 0.4MainWindow.g.i.cs │ ├── 0.5MainWindow.g.i.cs │ ├── App.g.cs │ ├── App.g.i.cs │ ├── AutoLoadingDev.g.i.cs │ ├── DesignTimeResolveAssemblyReferences.cache │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ ├── FoxDeploy DSC Designer.csproj.FileListAbsolute.txt │ ├── FoxDeployDSC_Designer_MarkupCompile.i.cache │ ├── FoxDeployDSC_Designer_MarkupCompile.i.lref │ ├── MainWindow.g.cs │ ├── MainWindow.g.i.cs │ ├── TabDesigner.g.i.cs │ ├── TempPE │ └── Properties.Resources.Designer.cs.dll │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs │ ├── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs │ ├── Window1.baml │ ├── Window1.g.cs │ ├── Window1.g.i.cs │ ├── Window2.g.cs │ ├── Window2.g.i.cs │ ├── Window3.g.i.cs │ ├── WpfApplication1.csproj.FileListAbsolute.txt │ ├── WpfApplication1.csprojResolveAssemblyReference.cache │ ├── WpfApplication1_MarkupCompile.cache │ ├── WpfApplication1_MarkupCompile.i.cache │ ├── WpfApplication1_MarkupCompile.lref │ ├── beta.baml │ ├── beta.g.cs │ └── beta.g.i.cs └── history ├── 0.1.ps1 ├── 0.2.ps1 ├── 0.3.ps1 ├── 0.4.ps1 ├── 0.5.ps1 ├── 0.6.ps1 ├── 0.7.ps1 └── sample valid DSC config.ps1 /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /Convert-DSCSyntaxToFields.ps1: -------------------------------------------------------------------------------- 1 | $sampleSyntax = ((Get-DscResource User -Syntax).Split("`n") -join "`n") 2 | 3 | #reference 4 | {" 5 | UserName = [string] 6 | [DependsOn = [string[]]] 7 | [Description = [string]] 8 | [Disabled = [bool]] 9 | [Ensure = [string]{ Absent | Present }] 10 | [FullName = [string]] 11 | [Password = [PSCredential]] 12 | [PasswordChangeNotAllowed = [bool]] 13 | [PasswordChangeRequired = [bool]] 14 | [PasswordNeverExpires = [bool]] 15 | [PsDscRunAsCredential = [PSCredential]] 16 | " | ConvertFrom-StringData} 17 | 18 | $fields = $sampleSyntax.Split("`n")[2..(($sampleSyntax.Split("`n").length)-3)] | ConvertFrom-StringData 19 | 20 | foreach ($field in $fields){ 21 | $name = $field.Keys[0] 22 | if ($name -like "``[*"){$name = $name -replace '\['} 23 | if ($name -like "Ensure*"){"$name is our special absent/present and should be a radio";continue} 24 | if ($field.Values[0] -like "*string*"){"$name should render as a textbox for strings"} 25 | if ($field.Values[0] -like "*bool*") {"$name should render as a radio true/false"} 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://foxdeploy.files.wordpress.com/2016/09/dsc-designer-3.png) 2 | 3 | # DSC-Designer # 4 | 5 | ---------- 6 | 7 | A project to build a Group Policy like frontend for Desired State Configuration 8 | 9 | # What is it? 10 | 11 | Have you ever wished DSC were a little more 'wizard-like', maybe resembling something like other Microsoft tools? Then you'll like this project! 12 | 13 | ![](https://foxdeploy.files.wordpress.com/2016/09/complete-ui.png) 14 | 15 | 16 | # How do I use it? 17 | 18 | Download the .ps1 file in this project and run the script like so: 19 | 20 | .\Start-DSCDesigner.ps1 21 | 22 | # What works? 23 | 24 | Currently, we are able to scrape all available DSC Resources installed on your machine, parse out the required syntax for each, and then, with a click of a button, export a valid DSC Configuration for application on systems in your environment. 25 | 26 | # How can I contribute? 27 | 28 | Contributions are simple. First, don't sell it! Secondly, simply fork the project, make your own commit and then send me a pull-request. That's it! 29 | 30 | Is it broke? *Open an issue, please :smile:* 31 | 32 | # What's planned? 33 | 34 | This project has been a work-in-progress since the MVP Summit last year, when I tried to get MS to make this UI, and they told me to do it on my own!  So this is version 1.0, the mostly-functional-get-it-out-the-door release.  Here's the planned features for somewhere down the road. 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 |
VersionFeatureCompleted
1.0Released!✔️
1.1Ability to enact the configuration on your machine
1.2Button to jump to local dsc resource folder
2.0Display DSC Configuration as a form
2.?render absent/present as radio button
?render multi-choice as a combobox
?render other options as checkbox
?render string as a textbox
?Display DSC Configuration as a form
??Track configuration Drift?
94 | 95 | # How was it made? -------------------------------------------------------------------------------- /Start-DSCDesigner.ps1: -------------------------------------------------------------------------------- 1 | $inputXML = @" 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |