PowerShellSet-ファイルサーバーへの場所PermissionDeniedunder Enter-PSSession
私たちの会社には、リモートコンピューターを更新するためのスクリプトを実行したいファイルサーバーがあります。
すべてのコンピューターはドメイン内にあります。
コンピューターを使用して実行する場合(PowerShellは管理者として実行されるかどうか)
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
できます
リモートコンピューター(同じサブネット)を使用している場合、同じユーザーに上記と同じコマンドが機能します。
しかし、私がするとき
Enter-PSSession -ComputerName PC-NAME -Credential my_username
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
Set-Locationは戻ります
Set-Location : Access is denied
+ CategoryInfo : PermissionDenied: (\\fileserver.company.org\scripts_folder\:String) [Set-Location], Unauthoriz
edAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand
アクセスが拒否されるのはなぜですか?私がPowerShellを実行しているのはどのユーザーEnter-PSSession
ですか?
回答
私にはこのルックスが好きdouble hop
かsecond hop problem
「セカンドホップ問題」とは、次のような状況を指します。
- ServerAにログインしています。
- ServerAから、リモートPowerShellセッションを開始してServerBに接続します。
- PowerShell Remotingセッションを介してServerBで実行するコマンドは、ServerC上のリソースにアクセスしようとします。
- PowerShell Remotingセッションの作成に使用した資格情報がServerBからServerCに渡されないため、ServerC上のリソースへのアクセスは拒否されます。
あなたの場合、あなたのコンピューターはServerAであり、セッションに入るコンピューターはServerBであり、ファイルサーバーはServerCです。
コンピューターがWMF3.0以降を使用している場合は、PSSessionConfiguration
それに関連付けられた資格情報を使用してを作成できます。その後、ServerBでリモートセッションを作成するときにこの構成を使用できます
構成を作成するには、ServerBの昇格されたPowerShellでこのコマンドを実行し、ServerCのリソースにアクセスする権限を持つ資格情報を使用します
Register-PSSessionConfiguration -Name AdminCredConfig -RunAsCredential 'domain\mydomainaccount' -Force
次にPSSessionConfiguration
、セッションに入るときに作成されたものを指定できます
Enter-PSSession -ComputerName ServerB -Credential my_username -ConfigurationName AdminCredConfig
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
これは私の意見ではあなたの問題を解決する最も簡単な方法です。ただし、CredSSPなど、セカンドホップの問題を回避する方法は複数あります。あなたはMSドキュメントでそれらについて読むことができます
WMF 3.0以降を使用していないコンピューターの場合、Invoke-Command Script Block内で資格情報を渡す必要があります。これも簡単に実行できますが、あまり洗練されておらず、扱いにくいコーディングが必要です。
または、セカンドホップの問題について心配する必要がない方法を探してください。
私は自分の問題の根本を見つけました。それは「セカンドホップ問題」と呼ばれています
「セカンドホップ問題」とは、次のような状況を指します。
ServerAにログインしています。
ServerAから、リモートPowerShellセッションを開始してServerBに接続します。
PowerShell Remotingセッションを介してServerBで実行するコマンドは、ServerC上のリソースにアクセスしようとします。
PowerShell Remotingセッションの作成に使用した資格情報がServerBからServerCに渡されないため、ServerC上のリソースへのアクセスは拒否されます。
https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7