トップ回答者
共有フォルダにInvoke-Command の時だけ接続できない

質問
-
いつもお世話になっております。
ちょっと不思議な現象が起こっているため、質問させてください。
現在特定サーバにリモートでログインし、共有フォルダ内にあるexeファイルを実行しソフトウェアの
インストールをするスプリクトを作成しています。
リモートでログインはできたのですが、なぜか以下コマンドで共有フォルダに接続しようとすると、以下メッセージがでて接続できません
実行コマンド:Invoke-Command -Session $PSSession -ScriptBlock { cd "\\サーバ-名\共有フォルダ名" }
----------------------------------------------------------------------------------------------------------------------------------------------------
アクセスが拒否されました。
発生場所 \\サーバ-名\共有フォルダ名\スプリクト.ps1:42 文字:5
+ Invoke-Command -Session $PSSession -ScriptBlock { cd "\\サーバ-名\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (\\サーバ-名\共有フォルダ名:String) [Set-Location], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand
+ PSComputerName : リモート接続先ホスト名----------------------------------------------------------------------------------------------------------------------------------------------------
もちろん共有フォルダへの接続はリモート接続先、コマンド実行マシンで確認できておりますがなぜか「Invoke-Command 」のときだけ接続できません
なぜか理由とかはわかりますでしょうか。
環境について追記しておきます
・全てADに参加しており、グループポリシーはFW無効にするものはありますがそれ以外はデフォルトです
・実行ユーザはドメインのadministratorになります
・すべて同じネットワーク内にあります
・実行の際は「Powershell.exe -ExecutionPolicy Bypass -File スプリクト.ps1」で実行しています
- 編集済み シュンペイ 2020年9月2日 7:19
回答
-
ご提示されたスクリプトですと、PSリモーティングで接続したコンピュータから、更に別のコンピュータ上にある共有フォルダへのアクセスとなるので、マルチホップ認証を要します。
PowerShellリモートでマルチホップを行うには、CredSSP認証が推奨されます。以下のドキュメントをご参照ください。
PowerShell リモート処理での次ホップの実行 - PowerShell | Microsoft Docs
また、PowerShellリモートでCredSSP認証を利用するための手順については、以下の記事が参考になると思います。
Hyper-V マネージャーで資格情報を指定して Hyper-V に接続する
(なお、当方のドメイン環境で試行した際には、この記事にて設定不要として抹消線が引かれている部分も実行する必要がありました。)
スクリプト中で、CredSSP認証を行うPSセッションは、以下のように作成します。
$PSSession = New-PSSession $remote -Credential $credential -Authentication Credssp
すべての返信
-
スプリクトの中身も置いておきます
-----------------------------------------------------------------------------------------------------------------------------------
Set-ExecutionPolicy ByPass -Scope Process
# セッション情報の作成
$remote = "リモート接続先ホスト名"
$user = "ドメイン\administrator"
$pass = "パスワード"
$credential = New-Object System.Management.Automation.PSCredential $user, (ConvertTo-SecureString $pass -AsPlainText -Force)
# 日付を年月日時分秒形式で取得
$format_date = (Get-Date).ToString("yyyyMMdd")
# セッションの取得
$PSSession = New-PSSession $remote -Credential $credential
# コマンドの投入(ホスト名取得)
$return = Invoke-Command -Session $PSSession -ScriptBlock { hostname }
$exportlog = "\\サーバ-名\共有フォルダ名\log\" + $format_date + "_" + $return + ".log"
# 日付を年月日時分秒形式で取得
$formatted_date = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
$message = $formatted_date + " " + $return + "にログイン完了"
echo $message | Out-File $exportlog -Encoding Unicode -append
# エラートラップの設定
$ErrorActionPreference = "Stop" # Stop(停止), Inquire ( 問い合わせ ), Continue ( 続行 )
# 日付を年月日時分秒形式で取得
$formatted_date = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
$message = $formatted_date + " " + $return + "にインストール開始"
echo $message | Out-File $exportlog -Encoding Unicode -append
$installlog = "\\サーバ-名\共有フォルダ名\log\" + $format_date + "_" + $return + "_インストール.log"
Invoke-Command -Session $PSSession -ScriptBlock { cd "\\サーバ-名\共有フォルダ名" }Remove-PSSession $PSSession
-----------------------------------------------------------------------------------------------------------------------------------
- 編集済み シュンペイ 2020年9月2日 6:35
-
ご提示されたスクリプトですと、PSリモーティングで接続したコンピュータから、更に別のコンピュータ上にある共有フォルダへのアクセスとなるので、マルチホップ認証を要します。
PowerShellリモートでマルチホップを行うには、CredSSP認証が推奨されます。以下のドキュメントをご参照ください。
PowerShell リモート処理での次ホップの実行 - PowerShell | Microsoft Docs
また、PowerShellリモートでCredSSP認証を利用するための手順については、以下の記事が参考になると思います。
Hyper-V マネージャーで資格情報を指定して Hyper-V に接続する
(なお、当方のドメイン環境で試行した際には、この記事にて設定不要として抹消線が引かれている部分も実行する必要がありました。)
スクリプト中で、CredSSP認証を行うPSセッションは、以下のように作成します。
$PSSession = New-PSSession $remote -Credential $credential -Authentication Credssp