0

psexec を使用して自動実行しています

get.bat


タスクリスト | findstr pmill.exe >> dc-01\c$\0001.txt


run_get.bat


psexec @%1 -u 管理者 -p パスワード -c "C:\get.bat"


pclist.txt


ネットワーク上のすべての PC で、

テキスト ファイル内の pmill.exe だけではなく、PC 名で結果を取得するにはどうすればよいですか? とにかくpowershellからできることはありますか?結果でPC名を取得する必要があります。ヒントください!

4

1 に答える 1

2

psexecの代わりに、これを試してください。

@echo off
setlocal enabledelayedexpansion
for /f %%I in (pclist.txt) do (
    set /p q="Checking %%I... "<NUL
    ping -n 1 -w 500 %%I>NUL 2>NUL
    if !errorlevel!==1 (
        echo Offline.
    ) else (
        wmic /node:%%I /user:adminuser /password:pass process where name="pmill.exe" get csname 2>NUL | find /i "%%I" >>dc-01\c$\0001.txt
        echo Done.
    )
)

%computername%pmill.exeが実行されている場合は出力され、それ以外の場合は何も出力されません。

編集:

使用する必要がある場合は、を呼び出すループpsexecのロジックを次のように変更することをお勧めします。forpsexec

@echo off
setlocal enabledelayedexpansion
for /f %%I in (pclist.txt) do (
    set pc=%%I
    set /p q="Checking %%I... "<NUL
    ping -n 1 -w 500 %%I>NUL 2>NUL
    if !errorlevel!==1 (
        echo Offline.
    ) else (
        for /f %%z in ('psexec \\!pc! -u adminuser -p pass tasklist 2^>^&1 ^| findstr /i "pmill.exe"') do (
            set /p q="pmill.exe found.  "<NUL
            echo !pc!>>dc-01\c$\0001.txt
        )
        echo Done.
    )
)
于 2013-02-20T14:51:48.370 に答える