Skip to content

Commit 853d5f6

Browse files
CopilotPower-MaverickCopilot
authored
Add configurable PowerShell ExecutionPolicy support with settings UI (#74)
* Initial plan * Add support for PowerShell ExecutionPolicy Bypass with Process scope Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Improve MSBuild path finding to use Process scope ExecutionPolicy Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Add configurable PowerShell execution policy with settings UI Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Fixed the PR changes made by copilot * Update SettingsForm.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update SettingsForm.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactor InitCommandLine for custom execution policy Removed default PowerShell initialization and added support for dynamic custom execution policies via `pluginSettings`. A success message is now displayed in the console when a custom policy is applied, enhancing flexibility and user feedback. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent c09142d commit 853d5f6

File tree

9 files changed

+106
-10
lines changed

9 files changed

+106
-10
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,5 @@ AppPackages/
6969
# but keep track of directories ending in .cache
7070
!*.[Cc]ache/
7171
/Maverick.PCF.Builder/SealedClasses/EntityDetails.cs
72+
/Maverick.PCF.Builder/.vs
73+
/.gitignore

Maverick.PCF.Builder.Helper/Commands.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,25 @@ public static string SetExecutionPolicyToUnrestricted()
4848
return $"powershell \"& \"Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -force\"\"";
4949
}
5050

51-
public static string ResetExecutionPolicy()
51+
public static string SetCustomExecutionPolicy(string customPolicy)
52+
{
53+
if (string.IsNullOrEmpty(customPolicy))
54+
{
55+
return string.Empty;
56+
}
57+
return $"powershell \"& \"Set-ExecutionPolicy {customPolicy}\"\"";
58+
}
59+
60+
public static string SetCustomExecutionPolicyWrapped(string customPolicy)
61+
{
62+
if (string.IsNullOrEmpty(customPolicy))
63+
{
64+
return SetExecutionPolicyToUnrestricted();
65+
}
66+
return $"powershell \"& \"Set-ExecutionPolicy {customPolicy}\"\"";
67+
}
68+
69+
public static string DefaultExecutionPolicy()
5270
{
5371
return $"powershell \"& \"Set-ExecutionPolicy -ExecutionPolicy Default -Scope CurrentUser -force\"\"";
5472
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"RootPath":"Z:\\SourceCode\\GitHub\\Power-Maverick\\PCF-CustomControlBuilder\\Maverick.PCF.Builder.Tests","ProjectFileName":"Maverick.PCF.Builder.Tests.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[],"References":[],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"Z:\\SourceCode\\GitHub\\Power-Maverick\\PCF-CustomControlBuilder\\Maverick.PCF.Builder.Tests\\bin\\Debug\\Maverick.PCF.Builder.Tests.dll","OutputItemRelativePath":"Maverick.PCF.Builder.Tests.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}

Maverick.PCF.Builder/Forms/SettingsForm.Designer.cs

Lines changed: 30 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Maverick.PCF.Builder/Forms/SettingsForm.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public SettingsForm(Settings localSettings)
2727

2828
txtSetWorkingFolder.Text = pluginSettings.WorkingDirectoryLocation;
2929
txtMsBuildPath.Text = pluginSettings.MsBuildLocation;
30+
txtCustomExecutionPolicy.Text = pluginSettings.CustomExecutionPolicy ?? string.Empty;
3031
txtControlNamespace.Text = pluginSettings.ControlNamespace;
3132
chkboxLoadNamespace.Checked = pluginSettings.AlwaysLoadNamespaceFromSettings;
3233
txtPublisherName.Text = pluginSettings.PublisherName;
@@ -47,6 +48,7 @@ private void BtnSave_Click(object sender, EventArgs e)
4748
{
4849
pluginSettings.WorkingDirectoryLocation = txtSetWorkingFolder.Text;
4950
pluginSettings.MsBuildLocation = txtMsBuildPath.Text;
51+
pluginSettings.CustomExecutionPolicy = txtCustomExecutionPolicy.Text;
5052

5153
pluginSettings.ControlNamespace = txtControlNamespace.Text;
5254
pluginSettings.AlwaysLoadNamespaceFromSettings = chkboxLoadNamespace.Checked;
@@ -70,6 +72,8 @@ private void BtnReset_Click(object sender, EventArgs e)
7072
txtSetWorkingFolder.Text = string.Empty;
7173
pluginSettings.WorkingDirectoryLocation = string.Empty;
7274
pluginSettings.MsBuildLocation = string.Empty;
75+
txtCustomExecutionPolicy.Text = string.Empty;
76+
pluginSettings.CustomExecutionPolicy = string.Empty;
7377

7478
pluginSettings.ControlNamespace = string.Empty;
7579
pluginSettings.AlwaysLoadNamespaceFromSettings = true;

Maverick.PCF.Builder/Maverick.PCF.Builder.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
312312
</Content>
313313
<None Include="ILMerge.props" />
314+
<None Include="PCF-CustomControlBuilder.nuspec" />
314315
<None Include="Resources\BeanEater.gif" />
315316
<Content Include="Console.ico" />
316317
<Content Include="ILMergeOrder.txt" />
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?xml version="1.0"?>
2+
<package >
3+
<metadata>
4+
<id>Maverick.PCF.Builder</id>
5+
<version>1.0.7</version>
6+
<title>PCF Builder</title>
7+
<authors>Danish Naglekar</authors>
8+
<owners>Power-Maverick</owners>
9+
<projectUrl>https://github.com/Power-Maverick/PCF-CustomControlBuilder</projectUrl>
10+
<iconUrl>https://github.com/Power-Maverick/PCF-CustomControlBuilder/blob/master/icon/PCCB_Icon.png</iconUrl>
11+
<icon>MainIcon.png</icon>
12+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
13+
<repository type="git" url="https://github.com/Power-Maverick/PCF-CustomControlBuilder.git" branch="master" />
14+
<license type="expression">MIT</license>
15+
<description>Easily create, build and deployment solution for your custom control using PCF.</description>
16+
<summary>Easily create, build and deployment solution for your custom control using PCF.</summary>
17+
<releaseNotes>
18+
---- NEW FEATURE ----
19+
#65 - Added support for React control and platform libraries (virtual control)
20+
21+
---- BUG FIXES ----
22+
#58 - Additional packages not loaded with existing control
23+
24+
</releaseNotes>
25+
<copyright>Copyright © Danish Naglekar</copyright>
26+
<tags>XrmToolBox, PCF, Power Apps, Power Apps Component Framework, PCF Builder</tags>
27+
<dependencies>
28+
<dependency id="XrmToolBox" version="1.2018.6.24" />
29+
</dependencies>
30+
</metadata>
31+
<files>
32+
<file src="PCFCustomControlBuilder\bin\Release\Maverick.PCF.Builder.dll" target="lib\net462\Plugins" />
33+
<file src="PCFCustomControlBuilder\bin\Release\MainIcon.png" target="" />
34+
<file src="PCFCustomControlBuilder\bin\Release\lcid.json" target="lib\net462\Plugins\Maverick.PCF.Builder\DataFiles" />
35+
<file src="PCFCustomControlBuilder\bin\Release\SupportedDataTypes.json" target="lib\net462\Plugins\Maverick.PCF.Builder\DataFiles" />
36+
<file src="PCFCustomControlBuilder\bin\Release\MsBuild.ps1" target="lib\net462\Plugins\Maverick.PCF.Builder" />
37+
<file src="PCFCustomControlBuilder\bin\Release\CoreTools\*.*" target="lib\net462\Plugins\Maverick.PCF.Builder\CoreTools" />
38+
<file src="PCFCustomControlBuilder\bin\Release\Templates\*.*" target="lib\net462\Plugins\Maverick.PCF.Builder\Templates" />
39+
</files>
40+
</package>

Maverick.PCF.Builder/PCFBuilder.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ public enum AuthProfileAction
100100
private void InitCommandLine()
101101
{
102102
consoleControl.StartProcess("cmd", $"/K powershell");
103+
104+
if (pluginSettings.CustomExecutionPolicy != string.Empty)
105+
{
106+
string[] commands = new string[] { Commands.Cmd.SetCustomExecutionPolicy(pluginSettings.CustomExecutionPolicy) };
107+
CommandLineHelper.RunCommand(commands);
108+
consoleControl.WriteOutput("Custom execution policy was successfully set.\n", Color.AliceBlue);
109+
}
103110
}
104111

105112
private void RunCommandLine(params string[] commands)
@@ -913,7 +920,7 @@ private string FindMsBuildPath()
913920
}
914921
else
915922
{
916-
string[] commands = new string[] { Commands.Cmd.SetExecutionPolicyToUnrestricted(), Commands.Cmd.FindMsBuild(), Commands.Cmd.ResetExecutionPolicy() };
923+
string[] commands = new string[] { Commands.Cmd.SetCustomExecutionPolicyWrapped(pluginSettings.CustomExecutionPolicy), Commands.Cmd.FindMsBuild(), Commands.Cmd.DefaultExecutionPolicy() };
917924
var output = CommandLineHelper.RunCommand(commands);
918925

919926
if (!string.IsNullOrEmpty(output) && output.ToLower().Contains("msbuild.ps1"))

Maverick.PCF.Builder/Settings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@ public Settings()
2727
public string PublisherName { get; set; }
2828
public string PublisherPrefix { get; set; }
2929
public bool AlwaysLoadPublisherDetailsFromSettings { get; set; }
30+
public string CustomExecutionPolicy { get; set; }
3031
}
3132
}

0 commit comments

Comments
 (0)