0

Windows 2008 R2 サーバーに次のバッチ スクリプトがあります。

@echo off
djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt
echo %ERRORLEVEL%

コマンドプロンプトまたはPowerShellを使用してサーバー自体でスクリプトを実行すると、完全に正常に動作し、「0」が返されます。

問題は、リモート コンピューターから実行する必要があることです。そのため、次のようにします (テスト用の例)。

Invoke-Command -ComputerName remotehost -ScriptBlock {.\script.cmd}

出力は「-1073740940」です。これはおそらくエラー コード C0000374 であり、ヒープの破損に関係している可能性があります。

これは djoin コマンド自体の問題のようです。同じ Invoke-Command を使用して問題なく、djoin をコメントアウトして、ping などの他のバイナリを実行できます。

ターゲット コンピューター上の PowerShell からスクリプトを実行すると問題なく動作することを念頭に置いて、リモート操作によってどのような問題が発生する可能性があるでしょうか?

どちらの場合も、Domain Admins のメンバーである私のアカウントを使用して、同じ権限でスクリプトが実行されます。それがパーミッションの問題だとは思えず、他にどこを見るべきかわかりません。

[編集]

全体をあきらめた。これは、djoin のバグか、djoin と PS リモート処理の間の相互作用におけるあいまいな問題のいずれかです。

ドメイン資格情報を提供するために「runas /netonly ...」を使用して、クライアントで直接djoinを実行することができました。これは非常に面倒な解決策ですが (runas によって開始されたプロセスの終了ステータスを取得する方法をまだ理解していません)、仕事は完了します。

4

1 に答える 1

1

これは、ほぼ間違いなく、古典的な「ダブルホップ」認証の問題です。PowerShell Remoting を使用すると、これらのホップの 1 つを使い果たしていることに注意してください。そのリモート マシンで実行して 3 番目のリモート マシンにアクセスするものは、認証が必要な場合はほとんど機能しません。

これを回避するには、 CredSSP などの資格情報を委任できる認証方法を使用できます。トランザクションのクライアント側サーバー側で変更を行う必要があるため、単に認証タイプを変更するよりも少し複雑です。MSDN、 PowerShell Remoting、および "Double-Hop" Problemに関するこのブログ投稿と、この "Hey, Scripting Guy!"を参照してください。投稿、CredSSP で PowerShell の "Second-Hop" 機能を有効にします。

于 2014-08-04T03:40:24.757 に答える