-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Enable WSManCredSSP cmdlets #4336
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -55,29 +55,6 @@ public string Role | |
| set { role = value; } | ||
| } | ||
| private string role; | ||
|
|
||
| /*/// <summary> | ||
| /// Role can either "Client" or "Server". | ||
| /// </summary> | ||
| [Parameter(ParameterSetName = Client, Mandatory = true, Position = 0)] | ||
| public SwitchParameter ClientRole | ||
| { | ||
| get { return isClient; } | ||
| set { isClient = value; } | ||
| } | ||
| private bool isClient; | ||
|
|
||
| /// <summary> | ||
| /// | ||
| /// </summary> | ||
| [Parameter(ParameterSetName = Server, Mandatory = true, Position = 0)] | ||
| public SwitchParameter ServerRole | ||
| { | ||
| get { return isServer; } | ||
| set { isServer = value; } | ||
| } | ||
| private bool isServer;*/ | ||
|
|
||
| #endregion | ||
|
|
||
| #region Utilities | ||
|
|
@@ -165,7 +142,6 @@ private void DisableClientSideSettings() | |
| } | ||
| m_SessionObj.Put(helper.CredSSP_RUri, inputXml, 0); | ||
|
|
||
| #if !CORECLR | ||
| if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) | ||
| { | ||
| this.DeleteUserDelegateSettings(); | ||
|
|
@@ -178,14 +154,6 @@ private void DisableClientSideSettings() | |
| thread.Start(); | ||
| thread.Join(); | ||
| } | ||
| #else | ||
| { | ||
| ThreadStart start = new ThreadStart(this.DeleteUserDelegateSettings); | ||
| Thread thread = new Thread(start); | ||
| thread.Start(); | ||
| thread.Join(); | ||
| } | ||
| #endif | ||
|
|
||
| if (!helper.ValidateCreadSSPRegistryRetry(false, null, applicationname)) | ||
| { | ||
|
|
@@ -493,8 +461,6 @@ protected override void BeginProcessing() | |
| throw new InvalidOperationException(message); | ||
| } | ||
| #endif | ||
| //If not running elevated, then throw an "elevation required" error message. | ||
| WSManHelper.ThrowIfNotAdministrator(); | ||
|
|
||
| // DelegateComputer cannot be specified when Role is other than client | ||
| if ((delegatecomputer != null) && !Role.Equals(Client, StringComparison.OrdinalIgnoreCase)) | ||
|
|
@@ -613,7 +579,6 @@ private void EnableClientSideSettings() | |
| //push the xml string with credssp enabled | ||
| xmldoc.LoadXml(m_SessionObj.Put(helper.CredSSP_RUri, newxmlcontent, 0)); | ||
|
|
||
| #if !CORECLR // No ApartmentState In CoreCLR | ||
| // set the Registry using GroupPolicyObject | ||
| if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) | ||
| { | ||
|
|
@@ -627,14 +592,6 @@ private void EnableClientSideSettings() | |
| thread.Start(); | ||
| thread.Join(); | ||
| } | ||
| #else | ||
| { | ||
| ThreadStart start = new ThreadStart(this.UpdateCurrentUserRegistrySettings); | ||
| Thread thread = new Thread(start); | ||
| thread.Start(); | ||
| thread.Join(); | ||
| } | ||
| #endif | ||
|
|
||
| if (helper.ValidateCreadSSPRegistryRetry(true, delegatecomputer, applicationname)) | ||
| { | ||
|
|
@@ -941,8 +898,6 @@ protected override void BeginProcessing() | |
| throw new InvalidOperationException(message); | ||
| } | ||
| #endif | ||
| //If not running elevated, then throw an "elevation required" error message. | ||
| WSManHelper.ThrowIfNotAdministrator(); | ||
|
||
|
|
||
| IWSManSession m_SessionObj = null; | ||
| try | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| Describe "CredSSP cmdlet tests" -Tags 'Feature','RequireAdminOnWindows' { | ||
|
||
|
|
||
| BeforeAll { | ||
| $powershell = Join-Path $PSHOME "powershell" | ||
| $notEnglish = $false | ||
| $IsToBeSkipped = !$IsWindows; | ||
|
|
||
| $originalDefaultParameterValues = $PSDefaultParameterValues.Clone() | ||
| if ( $IsToBeSkipped ) | ||
| { | ||
| $PSDefaultParameterValues["it:skip"] = $true | ||
| } | ||
| else | ||
| { | ||
| if ([System.Globalization.CultureInfo]::CurrentCulture.Name -ne "en-US") | ||
| { | ||
| $notEnglish = $true | ||
| } | ||
| } | ||
| } | ||
|
|
||
| AfterAll { | ||
| $global:PSDefaultParameterValues = $originalDefaultParameterValues | ||
| } | ||
|
|
||
| BeforeEach { | ||
| if ( ! $IsToBeSkipped ) | ||
| { | ||
| $errtxt = "$testdrive/error.txt" | ||
| Remove-Item $errtxt -Force -ErrorAction SilentlyContinue | ||
| $donefile = "$testdrive/done" | ||
| Remove-Item $donefile -Force -ErrorAction SilentlyContinue | ||
| } | ||
| } | ||
|
|
||
| It "Error returned if invalid parameters: <description>" -TestCases @( | ||
| @{params=@{Role="Client"};Description="Client role, no DelegateComputer"}, | ||
| @{params=@{Role="Server";DelegateComputer="."};Description="Server role w/ DelegateComputer"} | ||
| ) { | ||
| param ($params) | ||
| { Enable-WSManCredSSP @params } | ShouldBeErrorId "System.InvalidOperationException,Microsoft.WSMan.Management.EnableWSManCredSSPCommand" | ||
| } | ||
|
|
||
| It "Enable-WSManCredSSP works: <description>" -Skip:($NotEnglish -or $IsToBeSkipped) -TestCases @( | ||
| @{params=@{Role="Client";DelegateComputer="*"};description="client"}, | ||
| @{params=@{Role="Server"};description="server"} | ||
| ) { | ||
| param ($params) | ||
| $c = Enable-WSManCredSSP @params -Force | ||
| $c.CredSSP | Should Be $true | ||
|
|
||
| $c = Get-WSManCredSSP | ||
| if ($params.Role -eq "Client") | ||
| { | ||
| $c[0] | Should Match "The machine is configured to allow delegating fresh credentials to the following target\(s\):wsman/\*" | ||
|
||
| } | ||
| else | ||
| { | ||
| $c[1] | Should Match "This computer is configured to receive credentials from a remote client computer" | ||
|
||
| } | ||
| } | ||
|
|
||
| It "Disable-WSManCredSSP works: <role>" -Skip:($NotEnglish -or $IsToBeSkipped) -TestCases @( | ||
| @{Role="Client"}, | ||
| @{Role="Server"} | ||
| ) { | ||
| param ($role) | ||
| Disable-WSManCredSSP -Role $role | Should BeNullOrEmpty | ||
|
|
||
| $c = Get-WSManCredSSP | ||
| if ($role -eq "Client") | ||
| { | ||
| $c[0] | Should Match "The machine is not configured to allow delegating fresh credentials." | ||
|
||
| } | ||
| else | ||
| { | ||
| $c[1] | Should Match "This computer is not configured to receive credentials from a remote client computer" | ||
|
||
| } | ||
| } | ||
|
|
||
| It "Call cmdlet as API" { | ||
| $credssp = [Microsoft.WSMan.Management.EnableWSManCredSSPCommand]::new() | ||
| $credssp.Role = "Client" | ||
| $credssp.Role | Should BeExactly "Client" | ||
| $credssp.DelegateComputer = "foo", "bar" | ||
| $credssp.DelegateComputer -join ',' | Should Be "foo,bar" | ||
| $credssp.Force = $true | ||
| $credssp.Force | Should Be $true | ||
|
|
||
| $credssp = [Microsoft.WSMan.Management.DisableWSManCredSSPCommand]::new() | ||
| $credssp.Role = "Server" | ||
| $credssp.Role | Should BeExactly "Server" | ||
| } | ||
|
|
||
| It "Error returned if runas non-admin: <cmdline>" -TestCases @( | ||
| @{cmdline = "Enable-WSManCredSSP -Role Server -Force"; cmd = "EnableWSManCredSSPCommand"}, | ||
| @{cmdline = "Disable-WSManCredSSP -Role Server"; cmd = "DisableWSManCredSSPCommand"}, | ||
| @{cmdline = "Get-WSManCredSSP"; cmd = "GetWSmanCredSSPCommand"} | ||
| ) { | ||
| param ($cmdline, $cmd) | ||
|
|
||
| runas.exe /trustlevel:0x20000 "$powershell -nop -c try { $cmdline } catch { `$_.FullyQualifiedErrorId | Out-File $errtxt }; New-Item -Type File -Path $donefile" | ||
| $startTime = Get-Date | ||
| while (((Get-Date) - $startTime).TotalSeconds -lt 5 -and -not (Test-Path "$donefile")) | ||
| { | ||
| Start-Sleep -Milliseconds 100 | ||
| } | ||
| $errtxt | Should Exist | ||
| $err = Get-Content $errtxt | ||
| $err | Should Be "System.InvalidOperationException,Microsoft.WSMan.Management.$cmd" | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is redundant from line 486