2017-08-24 26 views
2

リモートコマンドを取得するためにPowerShellソケットサーバーを使用します。 しかし、私は一度だけリモートコマンドを取得することができます。 誰かが私に助けを与えることができますか?ありがとう。ここでpowershellソケットサーバーを使用してリモートコマンドを取得する

は私のコードです:

$endpoint = new-object System.Net.IPEndPoint([system.net.ipaddress]::any, 12346) 
$listener = new-object System.Net.Sockets.TcpListener $endpoint 
while($true) 
{ 
    $listener.Start() 
    $client = $listener.AcceptTcpClient() 

    [System.IO.StreamReader]$stream = new-object System.IO.StreamReader -argumentList $client.GetStream() 
    while($true) 
    { 
     $line = $stream.ReadLine() 
     while($line -ne $null){ 
      Write-Host $line -ForegroundColor Yellow 
     } 

    } 
    $client.Close() 
    $listener.Stop() 
} 
+0

「リモートコマンドを1回取得できますか?」とはどういう意味ですか?あなたが期待していることを説明してください –

+0

私はクライアントプログラムを使ってコマンドを送信します。 初めてクライアントを実行すると、私が送信するコマンドは通常、PowerShellで表示されます。 ただし、2回目以降はコマンドが表示されません。 –

答えて

1

問題は$ラインが初期割り当て後に新しい値が割り当てられていないので、あなたの中のチェック($ライン-ne $ nullが)常にtrueになるということです、 試しこれは:

$endpoint = new-object System.Net.IPEndPoint([system.net.ipaddress]::any, 12346) 
$listener = new-object System.Net.Sockets.TcpListener $endpoint 
while($true) 
{ 
    $listener.Start() 
    $client = $listener.AcceptTcpClient() 

    [System.IO.StreamReader]$stream = new-object System.IO.StreamReader -argumentList $client.GetStream() 
    while($true) 
    { 

     do { 
     $line = $stream.ReadLine() 
     Write-Host $line -ForegroundColor Yellow 
     }while($line -ne $null) 


    } 
    $client.Close() 
    $listener.Stop() 
} 
+0

ありがとうございますが、コードはまだ動作しません。 –

+0

@FroceLu何のエラーが出ているのですか?上記のプログラムを試してみました。私は共有して、telnetを使ってポートに接続し、複数のコマンドを渡して受け入れていました。 –

+0

@FroceLuは私の提案で答えを更新しました:-) –

関連する問題