iT邦幫忙

0

bat 執行 powershell 一些小疑問

幾個問題能問一下各位前輩

  1. bat的參數要如何匯入到 powershell內

程式碼
bat


REM set pc=
set /p pc=請輸入電腦名稱:
powershell ./lcd.ps1 "pc"


.sp1


ETSN -COMPUTERNAME pc
$monitor = gwmi WmiMonitorID -Namespace root\wmi
($monitor.SerialNumberID | foreach {[char]$_}) -join ""


  1. powershell 要怎麼宣告變數??

上網查是說 $pc = xxx

但是我直接執行
ETSN -COMPUTERNAME pc
$monitor = gwmi WmiMonitorID -Namespace root\wmi
($monitor.SerialNumberID | foreach {[char]$_}) -join ""

沒辦法成功執行顯示出我想要的東西

p.s

我希望的東西是

輸入電腦名稱

會顯示該電腦使用之螢幕序號

我用 cmd 去執行 是可以成功的

ETSN -COMPUTERNAME pc01

$monitor = gwmi WmiMonitorID -Namespace root\wmi

($monitor.SerialNumberID | foreach {[char]$_}) -join ""

輸出內容
SNxxxxxxxxxx

感謝大家

1 個回答

1
蟹老闆
iT邦大師 1 級 ‧ 2018-10-25 14:24:54
最佳解答

都已使用Powershell 應沒必要再從DOS 傳參數進去

$name = Read-Host '請輸入電腦名稱:'
看更多先前的回應...收起先前的回應...
zeo0621 iT邦新手 5 級 ‧ 2018-10-25 14:27:48 檢舉

那能問一下要怎麼回到輸入電腦名稱?

蟹老闆 iT邦大師 1 級 ‧ 2018-10-25 14:41:36 檢舉

可以參考這個

zeo0621 iT邦新手 5 級 ‧ 2018-10-29 10:28:16 檢舉

能詢問一下
為什麼
$name = Read-Host '請輸入電腦名稱:'
ETSN -COMPUTERNAME $name
$monitor = gwmi WmiMonitorID -Namespace root\wmi
($monitor.SerialNumberID | foreach {[char]$_}) -join ""

用Powershell 直接執行,但是卻不會抓到對方螢幕的序號,而是本機螢幕的序號??

我要如何讓
ETSN -COMPUTERNAME $name
這行先執行進入以後
在執行下面兩行
$monitor = gwmi WmiMonitorID -Namespace root\wmi
($monitor.SerialNumberID | foreach {[char]$_}) -join ""

蟹老闆 iT邦大師 1 級 ‧ 2018-10-29 17:01:05 檢舉

這個要啟用WinRM 才可連線至遠端電腦進行管理,如何啟用請參考WinRM

蟹老闆 iT邦大師 1 級 ‧ 2018-10-29 17:13:04 檢舉

這個簡單些
PowerShell

蟹老闆 iT邦大師 1 級 ‧ 2018-10-30 04:36:36 檢舉

參考邦友案例自己造批次檔輪子,僅限查詢本機序號

@Echo Off
SetLocal ENABLEDELAYEDEXPANSION
Set "Ascii= 0000000000000000000000000000000 ^!^"#$%%^&'()*+,-./0123456789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^^^_`abcdefghijklmnopqrstuvwxyz{^|}~"
For /f "delims=,{} tokens=1-16 Skip=1 eol= " %%a In ('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

zeo0621 iT邦新手 5 級 ‧ 2019-01-11 13:11:03 檢舉

能在詢問一下我這樣寫法有什麼問題嗎??

@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

有人能幫忙解一下嗎??

我要發表回答

立即登入回答