5

概要: 別のコンピューターで "get-wmiobject" を実行すると、正常に動作します。しかし、「invoke-command」「get-wmiobject」を実行すると、アクセスが拒否されます。

詳細: 中央サイトにワークステーション (Computer-Central) があり、そこからインベントリ スクリプトを実行しています。インベントリ スクリプトは、すべてのリモート サイトの IP ごとに複数の「get-wmi」コマンドをループします。ドメイン管理者として Computer-Central にログオンすると、スクリプトは正しく機能します。

私は今、それらのリモート サイトの 1 つにいます。現在のワークステーションは (Computer-SiteA) です。そのため、Computer-Central に直接ログインすることはできません。RDP を使用する必要があります。問題は、スクリプトが完了する前に RDP セッションがタイムアウトになることです (約 12 時間かかります)。そのため、RDP を使用してスクリプトを開始し、立ち去ることはできません。さまざまな理由から、スケジュールされたタスクを作成することもできません。

Powershell リモート処理が有効になっています。ドメイン管理者アカウントで Computer-SiteA にログオンし、次のコマンドを実行しました。

invoke-command -computername Computer-Central {dir c:}

これは正常に機能しました。そこで、次のコマンドでインベントリ スクリプトを開始しました (ここでも、Computer-SiteA でドメイン管理者として実行します)。

invoke-command -computername Computer-Central -filepath c:\inventory.ps1

スクリプトが開始され、一晩実行されました。しかし、get-wmi コマンドはすべて「アクセスが拒否されました」というエラーを生成しました。Computer-Central に RDP で接続し、次のコマンドを実行しました。

get-wmiobject -class win32_computersystem -property name -computername Computer-SiteB

これは正常に機能しました。WMI 情報を取得しました。

次に、Computer-SiteA にログオンし、次のコマンドを実行しました。

invoke-command -computername Computer-Central {get-wmiobject -class     win32_computersystem -property name -computername Computer-SiteB}

これは「アクセスが拒否されました」で失敗しました。ドメイン管理者としてログオンし、「別のユーザーとして実行」を実行して、PS コンソールがドメイン管理者アカウントとして開かれていることを確認しました。

私はこれに非常に混乱しています。「Invoke-Command」は、ローカル PC で使用した資格情報を使用して、リモート システムで Powershell.exe プロセスを開始する必要があります。「get-wmiobject」コマンドは、WMI クエリをリモート PC からターゲット PC に渡す必要があります。このときも、同じ資格情報が使用されます。しかし、そうではないようです。

何か案は?

編集: このコマンドを実行して、Computer-Central クエリ自体を作成しました。

invoke-command -computername Computer-Central {get-wmiobject -class     win32_computersystem -property name -computername Computer-Central}

それはうまくいきました。自分自身を対象とするリモート システムで「get-wmiobject」を呼び出すと、機能します。3 番目のシステムを対象とするリモート システムで「get-wmiobject」を呼び出すと、失敗します。これが役立つことを願っています。

4

1 に答える 1

3

問題は、リモート マシンに対して NTLM (Windows) 認証を使用していて、別のマシンに接続しようとしていることです。これは古典的な「ダブル ホップ」の問題です。マシン A でマシン B を認証し、B からマシン C に (WMI 経由で) 接続しようとしています。

http://blogs.msdn.com/b/besidethepoint/archive/2010/05/09/double-hop-authentication-why-ntlm-fails-and-kerberos-works.aspx

RDP を使用して A から B に接続し、B にユーザー名とパスワード (RDP では物理的に入力する必要があります) を与えるため、RDP で動作します。この時点で、B は NTLM を使用して C に接続できます。 RDP を使用しないでください。NTLM を使用して A から B に接続しているため、ユーザー名とパスワードを再度入力せずに B から C に NTLM を 2 回使用することはできません。

ありがたいことに、PowerShell にはこれに対する解決策があり、CredSSP 認証と呼ばれています。ただし、セットアップには少し余分な作業が必要ですが、完了したら、必要なことを行うことができます。ここに良いウォークスルーがあります:

https://blogs.technet.microsoft.com/heyscriptingguy/2012/11/14/enable-powershell-second-hop-functionality-with-credssp/

CredSSP はユーザー名とパスワードを A から B に「トンネリング」して、NTLM で C に認証できるようにします。

お役に立てれば、

于 2013-06-21T14:51:10.360 に答える