PowerShell Set-Location to file server PermissionDenied under Enter-PSSession

Aug 24 2020

Nella nostra azienda, abbiamo un file server da cui voglio eseguire script per aggiornare i computer remoti.

Tutti i computer sono in un dominio.

Quando sono sul mio computer ed eseguo (PowerShell viene eseguito come amministratore o meno)

Set-Location -Path "\\fileserver.company.org\scripts_folder\"

Funziona

Quando sono sul computer remoto (stessa sottorete) lo stesso utente funziona lo stesso comando sopra.

Ma quando lo faccio

Enter-PSSession -ComputerName PC-NAME -Credential my_username
Set-Location -Path "\\fileserver.company.org\scripts_folder\"

Il Set-Location ritorna

Set-Location : Access is denied
    + CategoryInfo          : PermissionDenied: (\\fileserver.company.org\scripts_folder\:String) [Set-Location], Unauthoriz
   edAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand

Perché l'accesso viene negato? Con quale utente è in esecuzione PowerShell quando io Enter-PSSession?

Risposte

2 SimonS Aug 25 2020 at 20:23

A me questo sembra un double hoporsecond hop problem

Il "problema del secondo salto" si riferisce a una situazione come la seguente:

  1. Hai effettuato l'accesso a ServerA.
  2. Da ServerA, si avvia una sessione remota di PowerShell per connettersi a ServerB.
  3. Un comando eseguito su ServerB tramite la sessione di PowerShell Remoting tenta di accedere a una risorsa su ServerC.
  4. L'accesso alla risorsa su ServerC è negato, perché le credenziali utilizzate per creare la sessione di PowerShell Remoting non vengono passate da ServerB a ServerC.

Nel tuo caso il tuo computer sarebbe ServerA, il computer in cui accedi alla sessione è ServerB e il file server è ServerC

Se i tuoi computer sono su WMF 3.0 o successivo, puoi creare un PSSessionConfigurationcon le credenziali ad esso legate. È quindi possibile utilizzare questa configurazione quando si crea una sessione remota su ServerB

Per creare la configurazione, eseguire questo comando in un PowerShell con privilegi elevati su ServerB e utilizzare una credenziale che disponga dell'autorizzazione per accedere alle risorse su ServerC

Register-PSSessionConfiguration -Name AdminCredConfig -RunAsCredential 'domain\mydomainaccount' -Force

Quindi è possibile specificare il creato PSSessionConfigurationquando si accede alla sessione

Enter-PSSession -ComputerName ServerB -Credential my_username -ConfigurationName AdminCredConfig
Set-Location -Path "\\fileserver.company.org\scripts_folder\"

Questo è il modo più semplice per risolvere il tuo problema secondo me. Tuttavia, esistono diversi modi per superare il problema del secondo hop, ad esempio CredSSP. puoi leggere su di loro in MS Docs

Per i computer che non sono su WMF 3.0 o versioni successive, dovrai passare le credenziali all'interno del blocco Invoke-Command Script , che è anche facile da ottenere ma non è molto elegante e richiede una codifica scomoda.

In alternativa, cerca un modo in cui non devi nemmeno preoccuparti del problema del secondo salto.

miharix Aug 25 2020 at 21:56

Ho trovato la radice del mio problema. Si chiama "problema del secondo salto"

Il "problema del secondo salto" si riferisce a una situazione come la seguente:

  1. Hai effettuato l'accesso a ServerA.

  2. Da ServerA, si avvia una sessione remota di PowerShell per connettersi a ServerB.

  3. Un comando eseguito su ServerB tramite la sessione di PowerShell Remoting tenta di accedere a una risorsa su ServerC.

  4. L'accesso alla risorsa su ServerC è negato, perché le credenziali utilizzate per creare la sessione di PowerShell Remoting non vengono passate da ServerB a ServerC.

https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7