2014-09-23 70 views
0

我需要查詢註冊表如何查詢註冊表項,並編寫計算機描述日誌文件

HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment 

我需要從srvcomment字符串值數據寫入日誌文件C:\Log.txt

我可以查詢註冊表,但我一直無法弄清楚如何使用if語句將值數據添加到日誌文件。我真的很感激幫助。

這是我迄今爲止

REG QUERY "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters" /v "srvcomment" | Find "REG_SZ">>C:\Users\Home\Desktop\Test\"Computer Description".txt 

我只需要從註冊表中計算機說明。除非有人知道是否有其他方法通過.bat文件從系統的其他任何位置捕獲信息。

+0

這是我到目前爲止。 – rodr 2014-09-24 01:22:47

+0

REG QUERY「HKLM \ SYSTEM \ CurrentControlSet \ services \ LanmanServer \ Parameters」/ v「srvcomment」|查找「REG_SZ」>> C:\ Users \ Home \ Desktop \ Test \「計算機描述」.txt – rodr 2014-09-24 01:23:03

+0

我只需要註冊表中的計算機描述。除非有人知道是否有其他方法通過.bat文件從系統的其他任何位置捕獲信息。 – rodr 2014-09-24 01:25:52

回答

0

你可以自己寫一個批處理腳本與這兩行。 僅爲您提供Value srvcomment的ValueDate。

@ECHO OFF 
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /v srvcomment') DO SET ServerName=%%B 
ECHO %ServerName% > C:\ServerName.txt 
0
reg /query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment" > "c:\Log.txt" 

+0

我試過了。不幸的是它沒有奏效。但是,你確實幫助我更進了一步。 – rodr 2014-09-24 01:16:56

+0

@rodr - 嘗試使用管理員權限執行此操作。 – npocmaka 2014-09-24 01:17:41

0

一種解決方案是:比"%TEMP%\Log.txt"不同

@echo off 
%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /V "srvcomment" 1>nul 2>nul 
if errorlevel 1 (
    echo Computer "%COMPUTERNAME%" has no description.>"%TEMP%\Log.txt" 
) else (
    for /F "tokens=2*" %%C in ('%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /V "srvcomment" ^| %SystemRoot%\System32\findstr.exe /C:srvcomment') do echo Computer "%COMPUTERNAME%" has description "%%D".>"%TEMP%\Log.txt" 
) 

東西應該用於日誌文件。 C:\Log.txt也不是很好,因爲驅動器C的根目錄自Windows Vista以來對非管理員進行了寫保護。

批處理文件首先使用命令reg檢查字符串值srvcomment是否在Windows註冊表中完全存在。輸出到標準輸出和標準錯誤流都被重定向到NUL設備來抑制它們。沒有計算機描述的計算機在註冊表中沒有此字符串值。在這種情況下,計算機的適當信息被寫入日誌文件。

但如果字符串值srvcomment在Windows註冊表中存在,命令reg與傳遞到工具findstr得到公正含srvcomment線輸出再次執行。管道字符|必須在命令for內的命令中使用^這裏進行轉義。

輸出由reg通過findstr過濾是:

srvcomment REG_SZ computer description 

for循環分裂基於分隔符的列表上的線。空格和水平製表符字符默認是唯一的分隔符。我們需要的是直到行尾的REG_SZ之後的字符串,即使此字符串包含空格。 REG_SZ是第二個用空格作爲分隔符的字符串。由於指定了tokens=2*,第二個字符串被分配給佔位符變量A,其他所有內容從第三個字符串開始,直到行尾爲佔位符變量B

所以現在所有需要寫入計算機描述的日誌文件都引用了佔位符變量B中的echo命令重定向到日誌文件的值。

有關使用命令的更多詳細信息,請在命令提示符窗口,一個接一個:

reg query /? 
findstr /? 
for /? 
0

您可以在您可能需要重新設置一個批處理文件中使用以下命令

wmic /OUTPUT:c:\log.txt os get description /VALUE 

或以下PowerShell命令

(Get-WmiObject -Class Win32_OperatingSystem).Description | Out-File -FilePath C:\log.txt