specific script run remoto remote pssession how computer commands powershell powershell-remoting winrm

script - Control remoto de Powershell: la política no permite la delegación de credenciales de usuario



powershell remoto (4)

Ampliando la respuesta anterior de Akira, en gpedit.msc tuve que configurar "Permitir delegaciones de credenciales nuevas con autenticación de servidor solo NTLM" en lugar de "Permitir delegaciones de credenciales nuevas".

Soy nuevo en PowerShell y tengo problemas para usar la delegación de credenciales. Tengo el siguiente script:

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

Antes de ejecutarlo, hice lo siguiente:

  1. Ejecute Enable-PSRemoting en myserver.
  2. Ejecute el Enable-WSManCredSSP Server en myserver.
  3. Ejecute Restart-Service WinRM en myserver.
  4. Ejecute Enable-WSManCredSSP Client –DelegateComputer myserver en el cliente.
  5. Reiniciado tanto el servidor como el cliente.

Pero una vez que ejecuto el script, aparece el siguiente mensaje de error:

[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

Revisé las políticas como se menciona en el mensaje de error, pero todo parece estar bien. ¿Qué más podría bloquearme?


Finalmente lo puse a funcionar gracias a esta página . Proporciona un script que establece las políticas de delegación de credenciales necesarias configurando directamente las claves de registro apropiadas. Una vez que ejecuté ese script con privilegios de administrador, pude establecer con éxito una conexión CredSSP a 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++ }


Tuve la necesidad de automatizar completamente mi solución, en particular la sección de la parte de la solución que te permite ingresar al editor de GPO.

1) Habilitar PS remoto

Enable-PSRemoting -force

2) Habilitar CredSSP

Enable-WSManCredSSP -Role Server -Force Enable-WSManCredSSP -Role Client -DelegateComputer locahost -Force Enable-WSManCredSSP -Role Client -DelegateComputer $env:COMPUTERNAME -Force Enable-WSManCredSSP -Role Client -DelegateComputer $domain -Force Enable-WSManCredSSP -Role Client -DelegateComputer "*.$domain" -Force Set-Item -Path "wsman:/localhost/service/auth/credSSP" -Value $True -Force

3) Habilitar las credenciales frescas de NTLM a través del Registro:

New-Item -Path HKLM:/SOFTWARE/Policies/Microsoft/Windows/CredentialsDelegation -Name AllowFreshCredentialsWhenNTLMOnly -Force New-ItemProperty -Path HKLM:/SOFTWARE/Policies/Microsoft/Windows/CredentialsDelegation/AllowFreshCredentialsWhenNTLMOnly -Name 1 -Value * -PropertyType String

Solo después de esto pude lanzar el script de powershell como el administrador local que pudo ejecutarse en una PSSession y realizar acciones de AD de forma previa.

$secpasswd = ConvertTo-SecureString $adPassword -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ("$domain/Admin", $secpasswd) $adminSession = New-PSSession -Credential $credential -Authentication Credssp; $sb = { param($p1, $p2) whoami New-ADUser .... } Invoke-Command -Session $adminSession -Script $sb -ArgumentList $domain,$userPassword


Tuve que hacer lo siguiente en el servidor:

Enable-WSManCredSSP -Role Server

Tuve que hacer lo siguiente en el cliente:

set-item wsman:localhost/client/trustedhosts -value * Enable-WSManCredSSP -Role Client –DelegateComputer *

Utilice gpedit.msc en el cliente para habilitar la delegación de credenciales nuevas a WSMAN / *:

  1. Expanda Local Computer Policy , expanda Computer Configuration , expanda Administrative Templates , expanda System y luego haga clic en Credential Delegation .
  2. En el panel Settings , haga doble clic en Allow Delegating Fresh Credentials with NTLM-only Server Authentication .
  3. En el cuadro de diálogo Allow Delegating Fresh Credentials with NTLM-only Server Authentication , haga lo siguiente:
  4. Haga clic en Enabled .
  5. En el área de Options , haga clic en Show .
  6. En Valor, escriba WSMAN/* y luego haga OK en OK . Asegúrese de que la Concatenate OS defaults with input above esté seleccionada, y luego haga OK en OK .

El siguiente comando ahora funciona (después de una solicitud de contraseña):

Invoke-Command { dir //fileserver/devtools } -computer appserver01 -authentication credssp -credential domain/user

Ver los foros de MSDN .

Ver TechNet