常見問題解答
由 Scripting Guys 編製
2002 年 6 月
| 指令檔撰寫的一般問題 | |
| 指令碼範例 | |
| 系統管理指令碼指南 (System Administration Scripting Guide) |
究竟什麼是指令檔?
指令檔只不過是一種純文字檔案,它是使用記事本或其他一些文字編輯器建立,並使用特定副檔名儲存的檔案 (例如:若您正在使用 VBScript 指令檔語言,則副檔名為 .VBS)。
好的。那麼為什麼要學習撰寫指令檔?
您是否曾發現自己為了完成某一工作而反復不斷地輸入同一組命令?您是否曾發現自己只是為了完成一些瑣碎的工作 … 而需要在同一精靈中依相同的先後順序按同一組按鈕,甚至不得不對多台電腦或多個使用者帳戶重複進行相同的處理?
指令檔有助於減少一些重複性工作。它是為描述完成某項工作所需的步驟而建立的檔案。您可以在建立指令檔之後執行它,它便會替您執行所有的步驟,節省您大量的時間和精力。您只需建立一次指令檔,然後便可以在任何需要執行該工作的時候重複使用它。
也可以排定指令檔在某天的某一時刻執行工作,甚至可以是在晚上無人看管的情況下。 而且,還可以將指令檔設計為能在許多不同電腦上執行相同的工作。需要從每一個網域控制站的事件記錄檔中擷取事件嗎?沒問題!將單一指令檔排定在午夜執行,您就會在第二天早晨來的時候,得到您要的資料。
對於指令檔撰寫我完全是個初學者。可以教我如何撰寫指令檔嗎?
希望「系統管理指令碼指南 」的出版可以引導您入門。同時,您也可以查閱〈VBScript Primer〉這篇文章,來作為系統管理指令檔撰寫的第一步:
http://www.microsoft.com/resources/documentation/windows/2000/server/scriptguide/en-us/sas_vbs_overview.mspx
可以推薦一本教導指令檔撰寫的書籍嗎?
不,實在很難。並不是因為我們認為所有其他指令檔撰寫的書籍都不全面,或是只有「系統管理指令碼指南 」值得閱讀 (呃…。)。而是因為我們尚未閱讀及複查市場上出現的所有指令檔撰寫書籍。
需要在電腦上安裝什麼軟體,才能撰寫指令檔?
不管您是否相信,只要您有記事本,就有了開始撰寫指令檔所需要的一切。
需要在電腦上安裝什麼軟體,才能執行指令檔?
這要視指令檔而定。下表列出了針對不同類別的 Windows 所建議的軟體。但是請記住,這並不代表您所要做的只是安裝此軟體,就可以讓每一種指令檔在您的電腦上執行。由於指令檔撰寫技術 (尤其是 WMI) 的變更,因此必須對 Windows XP 或 Windows .NET Server 上執行的許多指令檔進行一些小的修改,才能在 Windows 2000 上執行;而其他指令檔則根本無法在 Windows 2000 上執行。同樣地,許多在 Windows 2000 上執行的指令檔也將無法在 Windows NT 4.0 或 Windows 98 上執行。
| 平台 | WSH | VBScript | WMI | ADSI |
Windows 95 | 5.6 | 5.6 | 1085.0005 (1.5) | 5,0,00,0 (DSClient) |
Windows 98 | 5.6 | 5.6 | 1085.0005 (1.5) | 5,0,00,0 (DSClient) |
Windows NT 4.0 | 5.6 | 5.6 | 1085.0005 (1.5) | 5,0,00,0 (DSClient) |
Windows 2000 | 5.6 | 5.6 | 1085.0005 (1.5) | 5,0,00,0 |
Windows XP | 5.6 | 5.6 | 2600.0000 | 5,0,00,0 |
Windows .NET Server | TBD | TBD | TBD | TBD |
如何得知電腦上安裝了正確的軟體?
複製下列指令檔,將它貼到記事本中,並以 .VBS 副檔名儲存 (例如,Versions.vbs). 執行此指令檔,它會報告電腦上安裝的 WSH、VBScript、WMI 及 ADSI 的版本。 如果傳回的某個版本編號為空白,則表示沒有安裝該項技術。
On Error Resume Next
WScript.Echo "WSH Version: " & WScript.Version
Wscript.Echo "VBScript Version: " & ScriptEngineMajorVersion _
& "." & ScriptEngineMinorVersion
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer _
& "\root\cimv2")
Set colWMISettings = objWMIService.ExecQuery _
("Select * from Win32_WMISetting")
For Each objWMISetting in colWMISettings
Wscript.Echo "WMI Version: " & objWMISetting.BuildVersion
Next
Set objShell = CreateObject("WScript.Shell")
strAdsiVersion = _
objShell.RegRead("HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components_
\{E92B03AB-B707-11d2-9CBD-0000F87A369E}\Version")
If strAdsiVersion = vbEmpty Then
strAdsiVersion = objShell.RegRead("HKLM\SOFTWARE\Microsoft\ADs\_
Providers\LDAP\")
If strAdsiVersion = vbEmpty Then
strAdsiVersion = "ADSI is not installed."
Else
strAdsiVersion = "2.0"
End If
End If
WScript.Echo "ADSI Version: " & strAdsiVersion
如果沒有正確的版本該如何處理?
不用擔心;您可以從以下位置下載 Microsoft 指令檔技術的最新版本:
ADSI:
http://www.microsoft.com/windows2000/server/evaluation/news/-bulletins/adextension.asp
WMI:
http://www.microsoft.com/downloads/release.asp?ReleaseID=18490
WSH/VBScript:
http://msdn.microsoft.com/downloads/list/webdev.asp
可以在 Windows NT 4.0 或 Windows 98 電腦上執行 Active Directory 指令檔嗎?
是的,可以,但是您必須先安裝這些平台的 Active Directory 用戶端擴充 (DsClient.exe,若為 Windows NT 4.0,您還需要安裝 Service Pack 6a)。請參閱此網頁
http://www.microsoft.com/windows2000/server/evaluation/news/bulletins/-adextension.asp,取得 Active Directory 用戶端擴充(DsClient.exe)的相關資訊。
有沒有什麼方法可以讓我預先知道,指令檔是否能在我的電腦上執行?
目前還不行,但是我們正在解決這個問題。在不久的將來,我們將更新「Script Center」,並且指出每個給定指令檔執行所需的平台。
我嘗試撰寫了一個指令檔,但是它不能執行。怎麼辦?
在不知道諸如您所使用的 Windows 版本之類的問題,並且沒有看到實際的指令檔程式碼的情況下,很難回答這個問題。如果使用指令檔有困難,您可以嘗試在新的新聞群組 microsoft.public.windows.scripting_admin 中提出問題。相對於直接從我們這兒獲得回應而言,您更容易從新聞群組中獲得回應。
我需要管理網路的指令檔。您們能為我撰寫這個指令檔嗎?
不能。而且除了您所問的這個問題之外,我們也不會做其他瑣碎的事情。無論如何,我們不是專業的指令檔撰寫者;我們從事的是教育工作。如果您正要找人撰寫指令檔,您可以嘗試在新的新聞群組 microsoft.public.windows.scripting_admin 中詢問,看看是否有人接受。
這些指令檔看起來很有趣。我如何使用它們?
這是執行其中一個指令檔的最簡單方法:
從Script Center 網頁複製指令檔程式碼。
將所複製的程式碼貼到記事本中。
在記事本中,使用 .VBS 副檔名儲存該檔案 (例如,MySc ript.vbs). 強烈建議檔案名稱中不要包含空格。將這些指令檔儲存到公用資料夾 (例如,C:\Scripts) 也是一個好方法。
開啟命令視窗。如果有必要,可以使用 cd 命令切換到儲存指令檔的資料夾。
在命令視窗中,鍵入文字 cscript,其後跟隨指令檔名稱。例如:
cscript myscript.vbs
這裡確實有許多指令檔。我可以從 CD 或其他地方取得它們嗎?
不可以。但好處是,您不需要從 CD 上取得它們。相反地,您可以從說明檔中下載它們,完全可以將它們儲存在一張磁片上,還會剩餘很多空間。您可以從這裡下載說明檔:
http://www.microsoft.com/downloads/release.asp?ReleaseID=38942。
為什麼所有的範例指令檔都使用 VBScript 撰寫?
這些範例指令檔都擷取自「系統管理指令碼指南 」(用來教導系統管理員撰寫指令檔的新書) 中。基於教學目的,我們必須在整本書中使用選取的單一指令檔語言。我們選擇 VBScript,部份原因是我們覺得對於初學者學習而言它是最簡單的語言,還有部份原因是在 Windows 平台上它比 Rexx 或 Python 更普及。
還有,VBScript 集團支付給我們數百萬美元來使用他們的產品,而不是使用其他產品。嘿,使用 Python 的傢伙,您在聽嗎?
您們還會使用 [選擇您喜愛的指令檔語言:.NET、JScript、Perl、Python、Rexx 等等] 建立指令檔的相等版本嗎?
對不起,不可以 (嘿,使用 VBScript 版本時,我們還有許多問題)。然而,我們已經連絡了一些人,他們表示有興趣將部份指令檔轉換為其他語言。當這些工作完成時,我們會張貼至它們的連結。
我們的指令檔可以做一些有用的事,比如告訴我本機電腦上正在執行什麼服務。我是否可以修改這些指令檔,讓它們告訴我遠端電腦正在執行什麼服務?
您應該相信您可以。「Script Center」中的大部份 WMI 指令檔一開始就會建立名為 strComputer 的變數,然後將該變數的值設定為 "."。換句話說,該指令檔通常包含這樣的行:
strComputer = "."
這會使指令檔在本機電腦上執行。這是由於指令檔組成的方式以及 WMI 將名為 "." 的電腦視為本機電腦的事實。如果您想在遠端電腦執行此指令檔,只需將 "." 取代為遠端電腦的名稱 (包含在雙引號中)。例如,這行程式碼是在名為 PrintServer1 的遠端電腦執行指令檔:
strComputer = "PrintServer1"
這是為在遠端電腦上執行 WMI 指令檔所需要做的唯一變更。不過,要記住,您需要具有遠端電腦的系統管理員權限,才能成功執行指令檔。此外,您還必須在本機電腦及遠端電腦上安裝 WMI。
我有一些非常棒的指令檔,我認為有人會感興趣。我可以將它們放到Script Center嗎?
或許可以。我們正在製作一個系統,它可讓使用者上載他們喜愛的指令檔。然而,我們不知道這個系統什麼時候可用甚至是否可用;我們必須設計出技術細節,更不用說涉及有關法律責任的細節、測試等等。同時,如果您有一些覺得有趣的指令檔,可以將它們打包為 .ZIP 檔,然後將它們傳送到 scripter@microsoft.com。若時間允許,我們將查看它們 (在您感到疑惑時,向我們傳送附有 .VBS 檔的指令檔是沒有用的。我們的電子郵件伺服器會將其作為病毒自動刪除)。
[插入喜愛的工作:建立 OU、在用戶端電腦上設定 IP 位址,以及新增使用者到群組中等等] 的所有指令檔在什麼位置?
有許多正在進行中,但是還必須建立它們。「Script Center」最初只放置取自「系統管理指令碼指南 」的指令檔。指令檔指南正在製作中;我們仍在撰寫它的章節,還有許多章節需要撰寫。撰寫完這些章節以及這些章節附加的指令檔後,我們會將新的指令檔新增至「Script Center」。我們直覺地認為「Script Center」還不完整,但是我們認為現在有大約 400 個指令檔比再等六個月後有 600 個指令檔要好。
管理 [插入喜愛的技術:Exchange、SQL Server、IIS 等等] 的所有指令檔在什麼位置?
我們的書適合於基本的 Windows 作業系統管理;因此,我們並不處理如 Exchange 或 IIS 的技術。這是個壞消息。好消息是我們正在連絡一些其他的技術群組,而且他們表示有興趣將他們擁有的範例指令檔放置到「Script Center」中 (這讓您能在「Script Center」一次購足任何類型的系統管理指令檔)。
嗨,我寫信給您們並向您們詢問關於登入指令檔的問題,但我從未收到回信。
那是因為我們不喜歡您。
不是,等一下,我們剛剛只是開個玩笑,我們喜歡每一個人!(好,這就好像有個人在內布拉斯州的奧馬哈,我們不會真的關注他)。我們會儘可能回應更多的郵件,但是我們未回覆您是有許多原因的:
我們每天都會收到相當多的郵件,它們中的一部份肯定會失敗。
儘管我們會儘可能回應更多的郵件,但是我們不是技術支援人員,不要期望我們專職回應電子郵件。我們應該做的是撰寫關於系統管理員指令檔的書,若我們的主管看到我們不在撰寫該書時會很緊張 (儘管他們看到我們實際所寫的東西時,可能會變得更緊張)。
有時 (哎!) 我們不知道您問題的答案。
事實上,若您有關於「系統管理指令碼指南 」的問題或意見,請傳送電子郵件至 scripter@microsoft.com,我們可能會回應您。如果您遇到了一般的指令檔撰寫問題 (如何撰寫登入指令檔,如何使用指令檔停止服務等等),最好的方法是在新的新聞群組 microsoft.public.windows.scripting_admin 上張貼問題。
這些指令檔很棒,我打算立即開始使用它們來管理所有的電腦。有任何問題嗎
沒有問題。只需確定每次您在生產環境中實際執行其中一個指令檔時,都送一美元給我們。
不,嘿,只是開個玩笑,使用這些指令檔是免費的。並且使用這些指令檔來實際完成真實、現有的系統管理工作是沒有問題的。請牢記這些指令檔都是為教學目的而建立的。因此,它們的設計著重在簡單易懂而非效能,並且不包括某些內容,如錯誤處理,這些內容可能需要放入生產環境實際使用的指令檔。也請牢記,我們並不保證指令檔會正常工作,且不提供任何官方支援:如果您無法使指令檔工作,我們將不會到您的辦公室為您解決問題。
當然,除非您的辦公室就在大溪地或諸如此類的地方…
什麼是「系統管理指令碼指南 」?
「系統管理指令碼指南 」是本新書,將作為 Windows .NET Server Resource Kit 的一部分發佈。本書的設計目的是教導系統管理員如何使用指令檔來管理他們的 Windows 電腦。
可以傳送給我指令碼指南的複本嗎?
對不起,不可以。 第一,指令碼指南還未成形,我們仍在進行此項工作。另一方面,指令碼指南會是普通印刷書,那種您必須從喜愛的書店購買的書。嘿,我們都是有家累的!
何時可用指令碼指南?
信不信由您,我們不知道。我們被排定在 Windows .NET Server 發行後約 90 天推出新書。但是,因為 Windows .NET Server 的發行日期並未宣佈,所以甚至連我們都不知道該書何時可用。
僅僅為了取得指令碼指南,我必須購買整個 Resource Kit 嗎?
這個問題我們目前無法回答。在某個時候,指令碼指南會獨立成書,這樣您可以只購買指令碼指南而不是整個 Resource Kit。但是,我們不知道何時才會用這種方式推出指令碼指南。它可能在 Resource Kit 發行時作為獨立的部分同時隨附,或 60 至 90 天後才能另外購買指令碼指南。
我仍在使用 Windows 2000。有 Windows 2000 版本的指令碼指南嗎?
當然有,您真的認為我們會忘了 Windows 2000 的使用者嗎?實際上,我們的確是忘了,但我們已及時記起,並確定特別為 Windows 2000 產生指令碼指南的略縮版本。
順便提一下,Windows 2000 版本是縮略的事實與 Windows 2000 使用者個人無關。它只是反映出在 Windows 2000 中可以撰寫為指令檔的系統管理工作,比在 Windows .NET 或 Windows XP 中的這類工作少。
請問有 Windows 98 或 Windows NT 4.0 版本嗎?
貪心鬼,您究竟何時才會滿意?不,不會有 Windows 98 或 Windows NT 4.0 版本。對不起,但是我們必須劃出一條底線。
何時可用 Windows 2000 的指令碼指南?
我們確實不知道,但請於 2002 年 11 月的某時在您喜愛的書店之書架上尋找它。當然,我們也會在臨近發行日期時通知您。
我必須同時購買 .NET Server 與 Windows 2000 的指令碼指南嗎?
聽著,請購買任何我們要您買的東西 -- 對不起,舊習慣很難改變,不是嗎?
這個問題很難回答,我們能告訴您的最好答案就是「視情況而定」。例如,假設您的網路完全由 Windows XP 與 Windows .NET Server 的機器組成。一方面,值得等待指令碼指南的 Windows .NET Server 版本﹔畢竟,那將是任何想在那些平台上撰寫指令檔的人的詳盡參照。另一方面,該書的 Windows 2000 版本可在 Windows .NET Server 版本發行的 5 或 6 個月前得到。一個同樣有效的建議是,您可以先購買 Windows 2000 版本,學習撰寫指令檔的基本概念,再購買 Windows .NET Server 版本,並專注於 Windows 2000 所無法執行的新功能。
同樣地,如果您只有 Windows 2000 的電腦,並且不打算再升級那些電腦。那麼在這種情況下,Windows 2000 書籍會滿足您的基本管理需要。另一方面,如果您對實際學習撰寫指令檔,及繼續停留在指令檔技術的尖端水平上感興趣,那麼…。
換句話說,您必須自己對此做出決定。 但是,無論怎樣都不會傷害我們的感情。
也許,一點點。
如果我一本也不想買,又如何?
令人討厭的吝嗇鬼…。不,很好。兩本書中所有的內容都可透過 Internet 免費獲得 (不斷調整,以取得明細)。說實話,依此方式存取資訊可能不如將所有內容都放在書本裡方便。但是,如果您一本書也不想買,可以不必買。
當然,如果我們實際達到了一定百分比的利潤,就可以為您提供很多不同的建議。
如果我無法等到書籍發行,該如何?
我們將在 TechNet 與 MSDN 上定期公佈該書的摘要。例如,我們將 VBScript 章中的一段較長的摘要公佈在這裡:
http://www.microsoft.com/TechNet/prodtechnol/windows2000serv/maintain/-optimize/script/netvbscr.asp
我們也將 WMI 的多個章節的第一個章節公佈在這裡:
http://msdn.microsoft.com/library/en-us/dnclinic/html/scripting06112002.asp
請每個月查看 TechNet 與 MSDN,以取得新公佈的資訊。一旦公佈新資料,我們也會在新聞群組中宣佈。