因為偶而需要去大陸出差,需要一個跳板可以突破 GFW ,之前都是利用 SSH Tunnel ,不過在 ipad 上無法使用,因此找了台主機來架 VPN Server。網路上找到的範例教學大多是利用兩張網卡,研究了好久才知道 Windows 2008 是要怎樣設定,步驟如下:
2009-09-22
批次檔設定 classpath
windows 的批次檔以利用 for 來對目錄中的檔案進行處理,但是 for 在取得環境變數只會在一開始取,因此,如果當我們將批次檔寫成:
set CLASSPATH=
for %i in (*) do set LIST=% CLASSPATH%;%i
echo % CLASSPATH%
並不會建立目前目錄中所有檔案的清單,相反的只會將 CLASSPATH 變數設為最後一個找到的檔案。因為 % CLASSPATH% 只有在 FOR 敘述第一次被讀入時才展開,此時 CLASSPATH 變數是空的。所以我們實際執行的 FOR 迴圈是:
for %i in (*) do set LIST= %i
可是當我照著微軟的說明,將 % 改為 ! ,還是得不到正確的結果:
set CLASSPATH =
for %i in (*) do set LIST=! CLASSPATH!;%i
echo % CLASSPATH%
這部份我還沒找到為什麼不行。後來,在網路上找了一下,發現只要呼叫外部的批次檔或是其它 label 就不會有問題了:
set CLASSPATH =
FOR /f %%I IN ('dir /b *.jar') DO call :cpappend %%I
echo %CLASSPATH%
goto end
:cpappend
set CLASSPATH=%CLASSPATH%;%1
:end
2009-06-25
Vista + IIS + Access 出現 80004005 錯誤
最近有個同事遇到一個問題,開發好的程式在 Vista 上的 IIS 會沒辦法讀取 access 裡面的資料,後來上網查了一下,發現這個問題還滿常發生的,要解決也很簡單,在命令模式下執行下面三行指令即可:
- %windir%\system32\inetsrv\appcmd set config /section:applicationPools /[name='DefaultAppPool'].processModel.loadUserProfile:false
- icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant Users:(CI)(S,WD,AD,X)
- icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant "CREATOR OWNER":(OI)(CI)(IO
看起來因為 %windir%\serviceprofiles\networkservice\AppData\Local\Temp 這目錄的權限不足所造成的問題。
參考資料:
2009-06-08
運用 Windows Time 讓 Windows 進行時間同步
一般我們要進行時間的同步,可以使用 NTPClock 來進行同步。今天發現原來 Windows 有指令可以直接進行電腦時間的同步:
:: 設定要同步的 NTP Server
w32tm /config /update /manualpeerlist:ntp.ntu.edu.tw
:: 開始進行同步
w32tm /resync
如此一來,就不用再去特別下載 NTPClock 了。
註:
Windows Time 這個服務要開啟才能用
參考來源:
2009-04-09
運用 command 來批次改檔名
從網路上抓某些漫畫圖片回來,其裡面的命名會是 1.jpg, 2.jpg, 10.jpg, 11.jpg, 100.jpg... 等,使用看 Imagine 看時,看的順序會是 1, 10, 11, 12 ... 等,而不是真正想看到順序。最近剛好看到使用 awk sprintf 修改 檔案名稱,突然想到用在 Windows 環境下應該也是有處理的方式,找了一下 command 的寫法,可以用下面兩行指令來解決:
for /F %G in ('dir /b ?.jpg') do ren %G 00%G
for /F %G in ('dir /b ??.jpg') do ren %G 0%G
第一行是針對一位數的 jpg 檔前面補兩個 0。
第二行是針對二位數的 jpg 檔前面補一個 0。
2009-02-25
Windows 下的 su
最近因為用到 PostgreSQL ,而 PostgresSQL 有個限制,不能以【擁有系統管理者權限的使用者】來執行,因此在 Linux 下,就需要以 su 來改變身份去執行,那 windows 下要怎麼辦呢?小弟找到了兩個方法:
小弟先在系統中建立了一個 postgres 的帳號,然後利用上述兩個軟體來執行。
使用 psexec 的方法如下:
psexec -u postgres -p postgres D:\pgsql\bin\postgres -D D:\pgsql\data
使用 runas 的方法如下:
%windir%\System32\runas.exe /user:ComputerName\postgres "D:\pgsql\bin\pg_ctl start -D D:\pgsql\data"
使用 psexec 的好處是,可以直接將密碼放在參數上,這樣不用每次都去 keyin 密碼。而使用 runas 的話,每次都要輸入密碼,另外也可以加上 /savecred 參數來存儲存密碼(XP Home 是不能用的)。
2009-02-22
好用工具:Junction ( Windows 版的 symbolic link )
Linux 上有個 ln 指令可任意建立 link ( 包括 hard links 與 symbolic links ),這是個很好用的東西,在 Vista 上也有個 mklink 可以用來做相同的事,不過在 Windows XP 之前的環境卻沒有內建相對應的程式,而 Junction 就是一個可以替代的工具。
其使用說明如下:
Junction v1.05 - Windows junction creator and reparse point viewer Copyright (C) 2000-2007 Mark Russinovich Systems Internals - http://www.sysinternals.com The first usage is for displaying reparse point information, and the second usage is for creating or deleting a NTFS junction point: usage: junction [-s] [-q]新增: junction c:\Profiles\User1\MyDocs "d:\tmp\My Documents" 刪除: junction -d c:\Profiles\User1\MyDocs 如果不是透田 junction 去刪除 link,而是直接用檔案總管去刪除 link,會造成原來的資料被一併刪除,請特別注意。 另外, 有個 NTFS Link ext 可以讓我們使用 GUI 的方式進行 link。 參考: http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1276558-q Don't print error messages (quiet) -s Recurse subdirectories usage: junction [-d] [ ] -d Delete the specified junction example: junction d:\link c:\winnt
2009-02-03
SSH Tunnel
之前在客戶那,沒辦法使用 msn ,後來發現可以利用 ssh tunnel 來 proxy 連線。在 windows 平台下,我們可以使用 putty 或是 plink 來建立 ssh tunnel,因為這兩個都不支持密碼的在檔,所以我通常是使用 MyEnTunnel ,它是利用 plink 來進行連線,可以存下連線資料,方便我們進行連線。
那我們如何利用 MyEnTunnel 建立一個 socket proxy 呢?其使用部驟如下:
- 首先我們下載 MyEnTunnel 及 plink ,然後解壓縮放在一起:
- 執行 myentunnel.exe,設定連線資訊,記得勾選【Enable Dynamic SOCKS】:
- 點選 Connect,切換到 Status 頁即可看到是否連線成功
- 選擇【工具】=>【選項】
- 點選【進階】=>【網路】=>【設定】
選擇【手動設定 Proxy】將最下面的【SOCKS 主機】設定到本機端的 7070 port(對應 MyEntunnel 上所設定的 port),然後我們就可以利用 firefox 連線到 http://myip.easylife.idv.tw/ 來驗證是否是透過 ssh server 連線了。
2009-01-11
查看 port 被哪個程式占住了
一直以來,我都懶的去記 windows 的指令,而是使用 CurrPorts 這方便的工具來查,今天剛好在網路上看到記令,就把它記下來嚕,雖然比較麻煩,但是在沒有工具的情況下還是不錯用的:
netstat –ano a:表示列出所有連線中或 listening的連線。 n:表示使用數字形態列出,即 http 會以 80 顯示,ftp 會以 21 顯示。 o:則為列出該程式的 PID。
知道 PID 之後,接著就可以使用【工作管理員】或是【tasklist】查看該 PID 是由哪一支程式所執行。
在 Linux 底下則是要用下面的指令:
netstat -tulnp
t:顯示 TCP u:顯示 UDP l:只顯示 listening 的 processes n:不要解析 IP address names 或 port numbers p:顯示 listening ports 的 process 名稱
也可以使用:
lsof -i
2008-12-22
如何利用批次檔取得系統日期時間
之前曾經有想過要利用批次檔加上 windows 的排程來定時為測試用的資料庫進行備份,只是不知道怎麼取得目前系統日期時間來使用,最近剛好看到這幾篇文章,留下來做參考:
取得今天日期的年、月、日:
for /f "tokens=1-4 delims=-/ " %%i IN ("%date%") DO (
set year=%%i
set month=%%j
set day=%%k
)
取得當下時間的時、分、秒、百分之一秒
for /f "tokens=1-4 delims=:." %%i IN ("%time%") DO (
set hour=%%i
set minute=%%j
set second=%%k
set centisecond=%%l
)
組合含有日期、時間的字串:
SET OutputDir=%year%%month%%day%_%hour%_%minute%_%second%_%centisecond%
指令取得上個月的月份(使用 SET /A,/A 可以做數值運算(arithmetic)):
@echo off rem 把日期裡的斜線拿掉;2008/10/21→20081021 set Today=%DATE:/=% set ThisYear=%Today:~0,4% rem 取回今天的年度月份;200810 set ThisMonth=%Today:~4,2% rem 本月份減1取得上個月份 set /A LastMonth=%ThisMonth%-1 rem 如果是1月份的話,要把年度減1 if "%LastMonth%"=="0" set /A ThisYear=%ThisYear%-1 if "%LastMonth%"=="0" set LastMonth=12 rem 如果是1月到9月時,左補零成為01~09 if "%LastMonth:~1,1%"=="" set LastMonth=0%LastMonth% echo Year=%ThisYear% echo Month=%LastMonth%
參考:
2008-12-16
Web Debugger
因為開發 Web application 的原故,常需要去監控 Http 連線內容, request 與 reponse,最早之前是使用海盜版的 HttpWatch,後來發現微軟有提供了一個地方產品:fiddler,也可以用來分析 http 封包。
這程式其實算是一個 http proxy ,當我們啟動後,他會監聽 8888 port 當 proxy ,並且自動把 windows 的 http 及 https 的 proxy 指到本機的 8888 port,因此它就可以監聽所有的 http request 及 response。有這這程式,我們就可以容易的為 ajax 的程式除錯,或是查看 http head 、request parameter、reponse content 的內容是不是正確。如果 Firefox 要透過它來進行除錯,就要手動設定 proxy 指到本機端的 8888 port 了。
另外,因為預設 localhost 是不透過 proxy 來進行連線的,因此再本機測試的時候,可以加個點來讓瀏灠器透過 proxy 連線,如:
http://localhost.:8080/
目前這類相關 http debug 的產品看到的有:
IE base:
Firefox base:
- Live HTTP Headers
- HTTPGuideDog
- HttpFox 與 httpwatch 相當類似,還滿好用的
2008-08-18
如何啟動 ACPI 來讓電腦自動關閉電源
最近在公司為了節能減炭,計畫將一些測試用的 Server 定時開關機來減少電力的損耗,而那些電腦裡,有幾台是 Windows 2000 server ,主機版也有支援 ACPI,不知道為什麼關機就是會出現【您可以安心關機了】的字眼而不會直接關機,這樣的 Server 造成需要有人去實際關機而不能排程關機(人是懶墮的,可以由電腦自己開關機就不要排值日生去關啊
)。因此小弟就研究了一下,原來是 ACPI 的功能沒有被開啟,造成電腦不會自動關電源,只要照著以下步驟將 ACPI 的 Driver 改一下就行了(PS. 前提是主機版有支援 ACPI):
- 在【我的電腦】上按右鍵,選擇【管理】,點選【裝置管理員】,展開【電腦】,如果顯示如下【Advanced Configuration and Power Interface (ACPI)PC】表示已經開啟此功能,否則則繼續往下做。

- 在上面按右鍵,選【內容】,點選【驅動程式】
- 點選【更新驅動程式】,按下一步,選擇【請顯示這個裝置目前的驅動程式清單,讓我從清單中指定驅動程式(D)】
- 點選下一步,點選下面的【顯示這個裝置類別的所有硬體】,然後選擇 ACPI 的 driver。
- 點選下一步,安裝 Driver,重開機後就大功告成了
請注意,如果你的電腦沒有 Acpi 的功能,千萬不能裝這個 Driver,否則可能出問題。
訂閱:
文章 (Atom)




