能在詢問一下我這樣寫法有什麼問題嗎??
@ECHO OFF
REM set v_computer=168.1.1.1
:rd1
set /p v_computer=請輸入電腦名稱:
set main_cmd=powershell Invoke-Command -ComputerName
set cmd1=$gwmi WmiMonitorID -Namespace root\wmi
set cmd2=($monitor.SerialNumberID | foreach {[char]$_}) -join ""
%main_cmd% %v_computer% {%cmd1%}
%main_cmd% %v_computer% {%cmd2%}
goto rd1
pause
為什麼我執行不出來???
單獨用cmd 去執行是可以執行
porewshell
SP >> ETSN -COMPUTERNAME $name
$name >>$gwmi WmiMonitorID -Namespace root\wmi
$name >>($monitor.SerialNumberID | foreach {[char]$_}) -join ""
就能夠顯示
$name 螢幕序號
但是我用.bat則是卡在foreach
有人能幫忙解一下嗎??
上回給的例子加上參數就可以查詢其它電腦的序號,前題是遠端電腦須能連線。
@echo off
set /p v_computer=請輸入電腦名稱:
SetLocal ENABLEDELAYEDEXPANSION
Set "Ascii= 0000000000000000000000000000000 ^!^"#$%%^&'()*+,-./0123456789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^^^_`abcdefghijklmnopqrstuvwxyz{^|}~"
For /f "delims=,{} tokens=1-16 Skip=1 eol= " %%a In ('WMIC /Node:%v_computer% /NameSpace:\\Root\WMI Path WmiMonitorID Get SerialNumberID ^|findstr .') Do (
Echo 螢幕序號: !Ascii:~%%a,1!!Ascii:~%%b,1!!Ascii:~%%c,1!!Ascii:~%%d,1!!Ascii:~%%e,1!!Ascii:~%%f,1!!Ascii:~%%g,1!!Ascii:~%%h,1!!Ascii:~%%i,1!!Ascii:~%%j,1!!Ascii:~%%k,1!!Ascii:~%%l,1!!Ascii:~%%m,1!!Ascii:~%%n,1!!Ascii:~%%o,1!
)
Pause
若無法連線到遠端請自行google。
你好,我能循問一下這種方法可以用電腦名稱查詢嗎
我用IP是可以查詢沒錯
但是電腦名稱會出現全域切換參數不正確。
上網查也沒有特別出現解釋
在麻煩您
沒遇過這個錯誤,是不是你有改什麼.
了解,那可能是網路設定的問題(我是直接複製貼上的
看來這方法可能不適合用在我這裡
感謝您
那是否可以用
先連線到對方電腦,再跑這段程式碼的方式去執行??
就是
set /p v_computer=請輸入電腦名稱:
set main_cmd=powershell Invoke-Command -ComputerName
然後執行
SetLocal ENABLEDELAYEDEXPANSION
Set "Ascii= 0000000000000000000000000000000 ^!^"#$%%^&'()*+,-./0123456789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^^^^_`abcdefghijklmnopqrstuvwxyz{^|}~"
For /f "delims=,{} tokens=1-16 Skip=1 eol= " %%a In ('WMIC /Node:%v_computer% /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID ^|findstr .') Do (
Echo 螢幕序號: !Ascii:~%%a,1!!Ascii:~%%b,1!!Ascii:~%%c,1!!Ascii:~%%d,1!!Ascii:~%%e,1!!Ascii:~%%f,1!!Ascii:~%%g,1!!Ascii:~%%h,1!!Ascii:~%%i,1!!Ascii:~%%j,1!!Ascii:~%%k,1!!Ascii:~%%l,1!!Ascii:~%%m,1!!Ascii:~%%n,1!!Ascii:~%%o,1!
)
這樣??
之前有寫過一個抓主機廠牌型號的
@ECHO OFF
REM set v_computer=172.1.1.1
:rd1
set /p v_computer=請輸入電腦名稱:
set main_cmd=powershell Invoke-Command -ComputerName
set cmd=wmic bios get Manufacturer
set cmd1=wmic bios get serialnumber
echo 廠牌
%main_cmd% %v_computer% {%cmd%}
echo 序號
%main_cmd% %v_computer% {%cmd1%}
goto rd1
pause
所以我可以確認電腦遠端是有開起來的
對powershell不是很了解,你給的例子我這執行不起來,有可能是這邊的環境因素,若抓主板型號的可以運作,將
set cmd=wmic bios get Manufacturer
改成
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
應改會得到 00,00,00,00...... 這樣的字串,你能抓到嗎?
我直接執行
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
會出現下面的問題
錯誤:
描述 = 命名空間無效
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
才對
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
這兩行不是一樣??
所以我原本查主機序號的改成
@ECHO OFF
REM set v_computer=172.1.1.1
:rd1
set /p v_computer=請輸入電腦名稱:
set main_cmd=powershell Invoke-Command -ComputerName
WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
echo 廠牌
%main_cmd% %v_computer% {%cmd%}
echo 序號
%main_cmd% %v_computer% {%cmd1%}
goto rd1
pause
這樣子嗎??
這個是我根據您給的去做修正後可以看到
@ECHO OFF
REM set v_computer=172.16.14.77
:rd1
set /p v_computer=請輸入電腦名稱:
set main_cmd=powershell Invoke-Command -ComputerName
set cmd=WMIC /NameSpace:\Root\WMI Path WmiMonitorID Get SerialNumberID
%main_cmd% %v_computer% {%cmd%}
goto rd1
pause
-----
SerialNumberID
{49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
{65, 48, 66, 50, 49, 75, 48, 49, 53, 50, 0, 0, 0, 0, 0, 0}
後面要??
換這樣試試
@echo off
set /p v_computer=請輸入電腦名稱:
SetLocal ENABLEDELAYEDEXPANSION
Set "Ascii= 0000000000000000000000000000000 ^!^"#$%%^&'()*+,-./0123456789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^^^_`abcdefghijklmnopqrstuvwxyz{^|}~"
For /f "delims=,{} tokens=1-16 Skip=1 eol= " %%a In ('powershell Invoke-Command -ComputerName %v_computer% {WMIC /NameSpace:\\Root\WMI Path WmiMonitorID Get SerialNumberID} ^|findstr .') Do (
Echo 螢幕序號: !Ascii:~%%a,1!!Ascii:~%%b,1!!Ascii:~%%c,1!!Ascii:~%%d,1!!Ascii:~%%e,1!!Ascii:~%%f,1!!Ascii:~%%g,1!!Ascii:~%%h,1!!Ascii:~%%i,1!!Ascii:~%%j,1!!Ascii:~%%k,1!!Ascii:~%%l,1!!Ascii:~%%m,1!!Ascii:~%%n,1!!Ascii:~%%o,1!
)
Pause