Linux 中的 WMIC 查詢構造差異
此
wmic
查詢(NODE
,USER
,PASS
全部脫敏)…wmic /NODE:10.00.00.1 /LOCALE:MS_409 /PRIVILEGES:ENABLE /TRACE:OFF /INTERACTIVE:OFF /FAILFAST:OFF /USER:domain\my_user /PASSWORD:myPass! /OUTPUT:STDOUT /APPEND:STDOUT /AGGREGATE:ON class StdRegProv CALL EnumKey ^&H80000002,"Software\Microsoft\SystemCertificates\MY\Certificates"
^&H80000002
是 uint32 的轉換HKEY_LOCAL_MACHINE
… 在 Windows 的 CMD 提示符下完美執行。我也可以在本地 Windows 機器的節點包的上下文中成功執行它,我將假設這是因為
wmic
呼叫是專門針對本地機器(Windows)進行的,可以輕鬆處理它。返回給我一個包含我需要的結果……res.s名稱
$$ ‘BB731A3DD8F089A6D4E59AF9D706…’ $$
我創建了一個執行 Alpine 和節點的 docker 容器,並在其中託管了一個快速應用程序。我按照以下說明在 Linux 上安裝 WMIC …
https://askubuntu.com/questions/885407/installing-wmic-on-ubuntu-16-04-lts
這樣安裝成功。
現在,當我通過我的 Node 應用程序或直接命令從 Ubuntu 中的 bash 提示符執行完全相同的查詢時,我收到了以下結果:
$ wmic.exe /NODE:10.00.00.1 /LOCALE:MS_409 /PRIVILEGES:ENABLE /TRACE:OFF /INTERACTIVE:OFF /FAILFAST:OFF /USER:domain\my_user /PASSWORD:myPass! /OUTPUT:STDOUT /APPEND:STDOUT /AGGREGATE:ON 類 StdRegProv CALL EnumKey ^&H80000002,“Software\Microsoft\SystemCertificates\MY\Certificates”
$$ 1 $$426 bash: H80000002,Software\Microsoft\SystemCertificates\MY\Certificates: 沒有這樣的文件或目錄
$ ERROR: Description = 訪問被拒絕。
我一生都無法弄清楚這是由於 Linux 與 Windows 中的字元串格式錯誤,還是 Linux 執行的不同變體
wmic
無法正確解析我的查詢?在嘗試了@AB 的建議後,我完全刪除了插入符號/與號(^&),這是輸出:
$ wmic /NODE:10.23.0.11 /LOCALE:MS_409 /PRIVILEGES:ENABLE /TRACE:OFF /INTERACTIVE:OFF /FAILFAST:OFF /USER:aim4gain\svc_certdisc /PASSWORD:finiTAryduRationmagneticDialuP! /OUTPUT:STDOUT /APPEND:STDOUT /AGGREGATE:ON 類 StdRegProv CALL EnumKey H80000002,“Software\Microsoft\SystemCertificates\MY\Certificates”
錯誤:
描述 = 訪問被拒絕。
這是我在兩個作業系統上執行的具有相同憑據的相同查詢 - 但是我沒有從 Windows 獲得身份驗證問題。
對於任何想知道的人,經過數小時的測試,錯誤消息非常模糊。確保你以 bash 風格而不是 Windows 風格來逃避一切。
筆記:
\$
代替^&
- 將 USER 值包裝在 ’’ 中
- 將 PASSWORD 值包裝在 ’’ 中
這裡的參考資料(感謝@AB):
https://manpages.debian.org/buster/bash/bash.1.en.html#QUOTING
$ wmic /NODE:10.23.0.11 /LOCALE:MS_409 /PRIVILEGES:ENABLE /TRACE:OFF /INTERACTIVE:OFF /FAILFAST:OFF /USER:'domain\my_user' /PASSWORD:'myPass!' /OUTPUT:STDOUT /APPEND:STDOUT /AGGREGATE:ON class StdRegProv CALL EnumKey \&H80000002,"Software\Microsoft\SystemCertificates\MY\Certificates" Executing (StdRegProv)->EnumKey() Method execution successful. Out Parameters: instance of __PARAMETERS { ReturnValue = 0; sNames = {"BB731A3DD8F089A6D4E59AF9D70601F9CBB94A9D"}; };