Search code examples
powershellpowershell-remotingwinrm

Powershell remoting - Policy does not allow the delegation of user credentials


I'm new to powershell and I'm having troubles using credentials delegation. I have the following script:

$session = New-PSSession myserver -Authentication CredSSP -Credential DOMAIN\Administrator
Invoke-Command -Session $session -ScriptBlock { <Some PowerShell Command> }

Before running it, I did the following:

  1. Run Enable-PSRemoting on myserver.
  2. Run Enable-WSManCredSSP Server on myserver.
  3. Run Restart-Service WinRM on myserver.
  4. Run Enable-WSManCredSSP Client –DelegateComputer myserver on the client.
  5. Rebooted both the server and the client.

But once I run the script, I get the following error message:

[myserver] Connecting to remote server failed with the following error message : The WinRM client cannot process the request. A computer policy does not allow the delegation of
 the user credentials to the target computer. Use gpedit.msc and look at the following policy: Computer Configuration -> Administrative Templates -> System -> Credentials Delega
tion -> Allow Delegating Fresh Credentials.  Verify that it is enabled and configured with an SPN appropriate for the target computer. For example, for a target computer name "m
yserver.domain.com", the SPN can be one of the following: WSMAN/myserver.domain.com or WSMAN/*.domain.com. For more information, see the about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed

I checked the policies as mentioned in the error message but everything seems to be fine. What else could be blocking me?


Solution

  • I finally got it to work thanks to this page. It provides a script that sets the required credential delegation policies by setting the appropriate registry keys directly. Once I ran that script with admin privileges, I was able to successfully establish a CredSSP connection to myserver:

    Enable-WSManCredSSP -Role client -DelegateComputer *.mydomain.com
    
    $allowed = @('WSMAN/*.mydomain.com')
    
    $key = 'hklm:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation'
    if (!(Test-Path $key)) {
        md $key
    }
    New-ItemProperty -Path $key -Name AllowFreshCredentials -Value 1 -PropertyType Dword -Force            
    
    $key = Join-Path $key 'AllowFreshCredentials'
    if (!(Test-Path $key)) {
        md $key
    }
    $i = 1
    $allowed |% {
        # Script does not take into account existing entries in this key
        New-ItemProperty -Path $key -Name $i -Value $_ -PropertyType String -Force
        $i++
    }