2017-05-14 20 views
2

管理者権限でリモートコンピュータ上でpowershellスクリプトを実行する必要があります。 私は2つのスクリプトを持っています:クライアントとサーバー。 私はclient.ps1を起動すると、サーバマシン上でコマンドを呼び出しましたが、アクセスエラーが発生します。 write-host "hello"のようにserver.ps1でシンプルなコードを使用してもエラーは発生しません。リモートマシンで.ps1を実行

server.ps1:

Get-service -ComputerName 'client' 

client.ps1:

$ScriptBlockContent = { 
     d:\server.ps1 
     } 
$remote=New-PSSession -ComputerName 'server' 
Invoke-Command $remote -ScriptBlock $ScriptBlockContent 
+0

server.ps1はどこにありますか?あなたのマシンのローカル? – restless1987

+0

サーバー上のserver.ps1、クライアント上のclient.ps1。最初のクライアントを起動する必要があります。サーバ上でリモートスクリプトを呼び出す必要があります – Damir

+0

これはダブルホップの問題です。 restless1987が挙げられているCredSSPは1つの解決策である。ここには、[すべてのソリューションに関するブログ記事](https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/)があります。リソースベースの制約付き委任が最適なソリューションです。 – BenH

答えて

1

あなたの問題は認証です。サーバーが資格情報を使用できるようにする必要があります。 CredSSPを使用してこれを行うことができます。

  1. クライアント上でこれを有効にする:

    有効-WSManCredSSP -Roleクライアント-DelegateComputer ServerNameHere

  2. がサーバー上でそれを有効にする:

    を有効-WSManCredSSP -Roleサーバー

  3. これをあなたのInvoke-Commandに追加:

-Credential Domain\YourUsername -Authentication CredSSP

その上の発言:のCredSSPでは、あなたが(RDPと同じ)感染したシステムに接続する場合は、資格情報を盗むために、その簡単。安全なコンピュータでのみこれを行うようにしてください。

1

あなたのクライアントは、Dを開こうとしている:\ server.ps1となってアクセスが拒否されました。あなたのスクリプトブロックには、とにかくpowershellにserver.ps1の内容を処理させるための必要なコードも含まれていません。あなたはそれを複雑にする方法を持っています。

あなたが適切にスクリプトブロックを定義する必要があります。

このコマンドを実行する
$scriptblock = { Get-service -ComputerName 'client' } 
$remote=New-PSSession -ComputerName 'server' 
Invoke-Command $remote -ScriptBlock $scriptblock 

'Server'と呼ばれるマシンに接続し、'Client'Get-Serviceを実行するためにそれを伝えるあなたはclient.ps1を必要としないとserver.ps1それはすべてのことができます1つのスクリプトから実行されます。

winrmが実行され、サーバー上で構成されていることも確認する必要があります。

+0

私は2つのスクリプトが必要です。サーバーとクライアント。 Winrmは構成され、動作します。そして私はクライアント側でサーバーからスクリプトを実行する必要があります... – Damir

関連する問題