2

PSToolsを使用してアプリケーションとサービスのグループをインストールしようとしていますが、接続しようとしているコンピューターの電源がオフになっているか、内部ネットワークからアクセスできない別のネットワーク上にある可能性があることを考慮に入れたいと思います。

基本的に、管理共有を介してマシンにアクセスできない場合、これは私が受け取っているメッセージです:

MachineNameにアクセスできませんでした:
ネットワークパスが見つかりませんでした。MachineName
でデフォルトのadmin$共有が有効になっていることを確認してください。

これは、「エラーメッセージ」をキャプチャし、インストールが成功したかどうかを報告するために使用している構文です(マシンに接続できるかどうかによって異なります)。

@echo off
set /p name=What is the machine name?: 
psexec.exe \\%name% -u *useraccount* -p *password* \\ServerName\installation.bat
FOR /F "tokens=*" %%A IN ('COMMAND ^| FIND "Couldn't access"') DO SET Error=%%A
If "%Error%"=="Couldn't access" 
ECHO Installation Failed.
Else
ECHO Installtion complete.  
Pause
exit

現在、エラー変数を定義している時点でハングします。私がここで何が間違っているのか完全には理解できません。

4

1 に答える 1

1

'COMMAND ^| FIND "Couldn't access"'コマンドシェルを開くため、ハングします。そのシェルが終了するまで続行されません。

エラーメッセージを別のファイルにリダイレクトすることを検討する必要があります。2>Errors.txtpsexec行に、次の行で検索するファイルが表示されます。

これにより、バッチファイルは次のようになります。

@echo off
set /p name=What is the machine name?: 
psexec.exe \\\%name% ... \\\ServerName\installation.bat 1>Error.txt 2>&1 
for /f "tokens=*" %%A in ('FIND /i error.txt "Couldn't Access"') do SET Error=%%A
If not x%ERROR:Couldn=%==x%ERROR% (
ECHO Installation Failed.
) Else (
ECHO Installtion complete.  
)
Pause
exit

(また、複数行のIFを作成するために角かっこを使用していることに注意してください)マシン名を含む文字列全体をチェックする必要があるため、直接比較は機能しないため、が文字列の一部である
かどうかを確認します。Couldn

于 2012-10-02T16:23:33.633 に答える