ローカルPCからpowershellを用いて、サーバ上にあるPowershellをリモート実行した際に、
サーバ上のPowershell内に記載されているC++のgets関数の入力の処理が異常に動作致します。
異常な動作とは、キーボードの待ち受けが発生しないという現象になります。
■環境は以下の通りです。
【ローカル】
Windows 7
Powershell 2.0
【サーバ】
Windows 2008 R2
Powershell 2.0
C++はVisual c++ 2008 ExpressのWin32 コンソールアプリケーションにてビルドしています。
■処理の流れは以下の通りです。
[ローカル]C:\tmp\Local.ps1 ※Powershell
↓
リモート実行
↓
[サーバー]\\hoge\D:\tmp\ServerP.sp1 ※Powershell
↓
[サーバー]\\hoge\D:\tmp\ServerC.exe ※C++
■問題の切り分けとしては、以下のパターンを検証致しました。
①[ローカル]PS1→リモート実行→[サーバ]PS1→C++ = 異常
②[サーバ]C++ = 正常
③[サーバ]PS1→C++ = 正常
④[ローカル]より直接[サーバ]C++ = 正常
⑤[ローカル]より直接[サーバ]PS1→C++ = 正常
よって、Powershellからリモート実行した際のみに発生する問題だと考えています。
■各ソース
【Local.ps1】
※この3行はサーバへの接続設定。
$wk_sec_str = ConvertTo-SecureString (パスワード) -AsPlainText -Force #パスワードの暗号化
$wk_psc = New-Object System.Management.Automation.PsCredential ((ユーザ名), $wk_sec_str) #Credential option instance Create
$wk_sess = New-PSSession -ComputerName (\\hoge) -Credential $wk_psc #Session Create
#サーバでリモート実行
Invoke-Command -Session $wk_sess -ScriptBlock {D:\tmp\ServerP.sp1}
【ServerP.ps1】
echo "powershellの入力待ちです。Enterを押してください。"
$host.UI.ReadLine()
& D:\tmp\ServerC.exe
echo "powershellに戻ってきた!"
【ServerC.exe】
printf("C++のEXEを実行しました。数値を入力してください。\n");
char str[5];
L1:
gets(str);
if (str == "") {
printf("未入力です!入力してください!\n");
goto L1;
}
printf("入力がありました!\n");
return;
■画面の動き
現在の画面の遷移といたしましては、以下の通りになります。
[]内の記載は、PowershellからC++のいずれかの動作を示しています。
------------------------------------------------------------
PS C:\tmp>Local.ps1
powershellの入力待ちです。Enterを押してください。[PS1]
(Enterを押下)
C++のEXEを実行しました。数値を入力してください。 [C++]
未入力です!入力してください! [C++]
未入力です!入力してください! [C++]
未入力です!入力してください! [C++]
未入力です!入力してください! [C++]
・・・・(無限ループ)・・・
------------------------------------------------------------
上記の動きでは無く、以下のような動作にしたいと思っています。
------------------------------------------------------------
PS C:\tmp>Local.ps1
powershellの入力待ちです。Enterを押してください。[PS1]
(Enterを押下)
C++のEXEを実行しました。数値を入力してください。 [C++]
123(Enterを押下) [C++] ←入力待ちが発生し、正常に入力できる
入力がありました! [C++]
powershellに戻ってきた! [PS1]
(終了)
------------------------------------------------------------
■質問内容
問題は、リモート実行にあると思いますが、
リモート実行している状態でのgets関数は正常に挙動しなくなるのでしょうか?
正直いって・・・問題の原因の見当がまったくついておりません。
何か問題解決になりそうな情報がありましたらどんな情報でも構いませんので
ご教示頂けないでしょうか?
よろしくお願い致します。
また、当質問はマルチポストになります。
理由としましては、Powershell・C++のどちらの掲示板に投稿しても
結局は両方の投稿する事になると考えたからになります。
各掲示板にて同一のタイトルにて投稿させて頂きました。
タイトル「Powershellからリモート実行したC++のgets関数が正常に動作しない」
<マルチポスト先>
【マイクロソフトの技術情報ポータル】
http://social.technet.microsoft.com/For ... 99dc19de88
【C言語何でも質問掲示板】
http://dixq.net/forum/viewforum.php?f=3
長文で非常に申し訳ないですが、皆様よろしくお願い致します。