컴퓨터2010.01.28 01:00
http://www.u229.no/stuff/snippets/UTC.asp
http://www.paulsadowski.com/wsh/timestamp.htm

Sample output:
timestamp.vbs
1041812764

timestamp.vbs 1041812764
Mon Jan 6 00:26:04 2003

You can specify multiple timestamps on the command-line.

Please change the constant 'off' to reflect the offset in hours from UTC for your locale.

 
--------------------------------------------------------------------------------
 
An example script:

' Your timezone's offset, in hours, from UTC (change for your locale)
Const off = -5

args = WScript.Arguments.Count
if args = 0 then
 SecsSince = CLng(DateDiff("s", "01/01/1970 00:00:00", Now))
 wscript.echo SecsSince - 3600 * abs(off)
else
 for x = 0 to args - 1
  dt = DateAdd("s", WScript.Arguments.Item(x), "01/01/1970 00:00:00")
  fdt = FormatDateTime(DateValue(dt))
  ftm = FormatDateTime(TimeValue(dt))
  if Len(fdt) < 10 then
   fdt = space(10 - Len(fdt)) & fdt
  end if
  if Len(ftm) = 10 then
   ftm = " " & ftm
  end if
  ThisTime = fdt & " " & ftm
  Wscript.Echo WeekDayName(WeekDay(ThisTime), true) &_
  space(1) & MonthName(Month(ThisTime), true) & space(1) &_
  Day(ThisTime) & space(1) & right("00" & Hour(ThisTime), 2) &_
  ":" & right("00" & Minute(ThisTime), 2) & ":" & right("00" &_
  Second(ThisTime), 2) & space(1) & Year(ThisTime)
 next
end if

 
--------------------------------------------------------------------------------
 
Bare Functions

Function TS2Date(TS)
TS2Date = DateAdd("s", TS, "01/01/1970 00:00:00")
End Function

Function UDateNow()
UDateNow = CLng(DateDiff("s", "01/01/1970 00:00:00", Now))
End Function

Function UDate(ThisDate)
UDate = CLng(DateDiff("s", "01/01/1970 00:00:00", ThisDate))
End Function
Posted by Zasfe
컴퓨터2009.06.10 08:00

처음 무언가를 배우는 사람은 다른 사람이 남긴 것을 보고 배우게 됩니다.
VBScript 를 공부하고 있습니다. 문법은 GUI 관련 부분이 없는 정도의 Visual Basic 와 비슷합니다. PowerShell 과 같이 특정 윈도우 상위만 지원하는 것이 아닌 모든 윈도우에서 사용이 가능하며, 조금은 번거롭지만 닷넷에서도 사용이 가능합니다. 저 같은 사람에게는 정말 가뭄의 단비같은 존재입니다.

요즘 획득한(?) 웹쉘의 내용을 보면서 참 많은것을 느꼈습니다.

이제까지 아무생각 없이 IF 문을 이용해서 특정 문자가 들어있는 부분을 체크했었는데 이 소스가 더 나아 보입니다.
소스1
IF instr(keyword, "\")>0 or instr(keyword, "/")>0 or instr(keyword, ":")>0 or .... then
   ........
End IF

그런데 이번에 본 웹쉘에는 다음과 같은 내용이 있었습니다.
소스2
flag =  instr(keyword, "\")>0 or instr(keyword, "/")>0
flag = flag or instr(keyword, ":")>0
flag = flag or instr(keyword, "|")>0
....
flag = flag or instr(keyword, "&")>0
IF flag then
   ........
End IF

2번째 소스는 flag 라는 변수와 OR 라는 논리 연산자를 이용해서 소스수정이 쉽도록 작성이 되어 있습니다.

OR 논리 연산자 는 입력값이 둘다 False 일 경우 False 를 반환하며, 그외에는 True 를 반환합니다.
입력1 값 입력2 값 결과
0 0 0
0 1 1
1 0 1
1 1 1


소스1과 소스2의 차이는 크게 없습니다. 다만 현제 작성하기 쉬운 것와 나중에 수정하기 쉬운 차이가 있습니다.

가령 체크를 해봐야 할 문자가 10개 정도 된다면 어떻게 될까요.
소스1의 방식으로는 조건문(IF)이 상당히 긴 내용으로 작성이 됩니다. 소스2의 방법으로는 줄(라인)수가 많게 작성이 됩니다.
차이는 조건문의 일부를 수정할때 발생을 합니다. 소스1의 방식은 일단 알아보기가 쉽지 않습니다. 그나마 띄어쓰기라도 했다면 알아보기 쉬울테지만 소스2만큼 쉽지는 않을것입니다.

이렇듯 성능상 차이가 있는 부분은 아니지만 나중에 다시 소스를 보게될 경우를 대비해서 조금이라도 알아보기 쉬운 코드로 작성을 해야 할것 같습니다.

일단 주석부터 추가해야 겠네요. ^^;



결론. 지금 편하자고 막하면 나중에 고생한다.

Posted by Zasfe
컴퓨터2009.01.06 14:02
대소문자가 구별되지 않은 폴더의 전체경로를 가지고 있을때, 폴더가 있을경우 원래의 대소문자가 포함된 이름을 반환하는 VBScript 입니다.

사용법
GetFolderRealName("부모폴더명","찾을 폴더명")

반환값
  1. 폴더가 있을 경우 : 대소문자포함된 폴더명
  2. 폴더가 없는 경우 : 값없음

Function GetRealName(oPath)
  Dim fso, d, f, sf, s, f1
  Dim ParentsPath, tmpPath, LastRealName
  GetRealName = ""
  tmpPath = Split(oPath,"\")
  LastRealName = tmpPath(Ubound(tmpPath))
  ParentsPath = Replace(oPath,"\"&LastRealName,"")
  If Len(ParentsPath)<3 then ParentsPath = ParentsPath &"\"
 
  Set fso = CreateObject("Scripting.FileSystemObject")
  If fso.FolderExists(oPath) then
    Set f = fso.GetFolder(ParentsPath)
    Set sf = f.SubFolders
    For Each f1 in sf
      If StrComp(Lcase(f1.name),Lcase(LastRealName),1) = 0 then
        s = f1.Path
        Exit For
      End if
    Next
  ElseIf fso.FileExists(oPath) then
    Set f = fso.GetFolder(ParentsPath)
    Set sf = f.files
    For Each f1 in sf
      If StrComp(Lcase(f1.name),Lcase(LastRealName),1) = 0 then
        s = f1.Path
        Exit For
      End if
    Next
  Else
    s = ""
  End if
  GetRealName = s
End Function

수정(090106) - 폴더 와 파일 모두 사용가능하도록 변경
Posted by Zasfe
컴퓨터2008.09.16 15:13

ADODB.connection 를 이용해서 특정포트의 사용여부를 확인하는 스크립트에 대한 내용입니다.

일반적으로 포트를 스캔하는 방법은 여러가지가 있습니다.

1. telnet 프로그램을 이용한 방법
2. 어플리케이션을 이용한 방법
(superscan, nmap, ... )
3. ADODB 개체를 이용한 방법

일반적으로 telnet 과 어플리케이션을 이용한 방법은 널리 알려져서 한번이라도 보신적이 있는 내용일것입니다.
하지만 ADODB 개체라고 하는 조금 생소한 것에 대해서 알아보면 다음과 같습니다.

인용
액티브엑스 데이터 오브젝트(ADO)는 데이터 원본에 접근하기 위해 마이크로소프트 표준으로 제작된 컴포넌트 오브젝트 모델 객체들의 모임이자, 프로그래밍 인터페이스(API)이다.

연결 객체(Connection Object): 특정 DBMS(데이터베이스 관리 시스템)이나 다른 데이터 소스에 대한 연결을 설정한다. 또한 데이터베이스에 쿼리를 보낼 수도 있다
 

역시나 말이 좀 어렵습니다. 데이터베이스 연결을 위해 이미 설치되어 있는 통로라는 이야기입니다. 이중 제가 말하고자 하는 핵심은 특정 데이터가 아닌 다른 서버의 데이터베이스로의 연결객체 부분입니다.

"특정DBMS나 다른 데이터 소스에 대한 연결을 설정한다."

즉, 특정 서버로 연결을 시도할수도 있다는것이고,  효율적인 활용을 위해서 여러가지의 포트 접근이 허용되어 있다는 것입니다.( 기본 개념이며, 방화벽등 네트워크 환경에 따라서 특정 포트로의 연결이 허용되지 않을수 있습니다.)
ADODB 의 주된 용도가 데이터베이스로의 연결이기때문에 네트워크 연결시도시 연결이 안될때에는 에러코드와 함께 연결이 종료됩니다.

이런 연결이 가능할때와 불가능할때의 에러코드가 달리지는 성질을 이용한 방법이 ADODB 를 이용한 포트 스캔입니다.

ADODB 를 이용한 포트 스캔 스크립트
 Dim targetip, portNum
 targetip = "10.10.1.165"           ' 접속테스트를 위한 서버IP
 portNum = 80                            ' 스캔할 포트번호
 On Error Resume Next
 set conn = CreateObject("ADODB.connection")           ' ADODB 사용
 connstr="Provider=SQLOLEDB.1;Data Source= "&targetip&","&portNum&";UserID=lake2;Password=;"
 conn.ConnectionTimeout = 1    ' 연결이 열릴 때까지 대기하는 시간(초)입니다 - MSDN
 conn.open connstr
 If Err Then
  If Err.number = -2147217843 or Err.number = -2147467259 Then
   If InStr(Err.description, "(Connect()).") > 0 Then
    wscript.echo (targetip & ":" & portNum & ".........불가")
   Else
    wscript.echo (targetip & ":" & portNum & ".........가능")
   End If
  End If
 End If
 

사용자 삽입 이미지

- 참고
Posted by Zasfe
컴퓨터2008.02.20 09:29
엑셀로 작업을 하다보면 링크가 필요없음에도 불구하고 자동으로 만들어 버립니다.

처음 작업할때는 그런가보다 하지만 은근 신경도 쓰이고, 갯수가 많아지면 삭제하는것도 일(?) 입니다.

이럴때 한번에 해결할수 있는 방법이 있습니다.

1. 도구 - 매크로 - Visual Basic Editer 를 실행합니다.
Visual Basic Editer


2. 다음 구문을 입력합니다.
입력 구문



3. 이제 링크를 삭제할 시트를 열고 도구 - 매크로 - 매크로  를 실행합니다.
매크로


4. 방금 등록한 RemoveHyperlinks 를 실행합니다.
사용자 삽입 이미지


앞으로는 3,4 번동작만으로 링크를 제거할수 있습니다.


만약 링크생성자체를 막고 싶으면,
도구 - 자동고침옵션 - 입력 할 때 자동 서식 을 선택해보면 다음과 같이 체크를 풀어주시면 됩니다.

사용자 삽입 이미지사용자 삽입 이미지
Posted by Zasfe