指令檔常見問題集

更新日期:

常見問題解答

Scripting Guys 編製

2002 年 6 月

本頁內容
指令檔撰寫的一般問題指令檔撰寫的一般問題
指令碼範例指令碼範例
系統管理指令碼指南 (System Administration Scripting Guide)系統管理指令碼指南 (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 上執行。

平台WSHVBScriptWMI 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 上張貼問題。

這些指令檔很棒,我打算立即開始使用它們來管理所有的電腦。有任何問題嗎

沒有問題。只需確定每次您在生產環境中實際執行其中一個指令檔時,都送一美元給我們。
不,嘿,只是開個玩笑,使用這些指令檔是免費的。並且使用這些指令檔來實際完成真實、現有的系統管理工作是沒有問題的。請牢記這些指令檔都是為教學目的而建立的。因此,它們的設計著重在簡單易懂而非效能,並且不包括某些內容,如錯誤處理,這些內容可能需要放入生產環境實際使用的指令檔。也請牢記,我們並不保證指令檔會正常工作,且不提供任何官方支援:如果您無法使指令檔工作,我們將不會到您的辦公室為您解決問題。
當然,除非您的辦公室就在大溪地或諸如此類的地方…

回到頁首回到頁首

系統管理指令碼指南 (System Administration Scripting Guide)

什麼是「系統管理指令碼指南 」?

「系統管理指令碼指南 」是本新書,將作為 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,以取得新公佈的資訊。一旦公佈新資料,我們也會在新聞群組中宣佈。


回到頁首回到頁首