컴퓨터2008.02.18 16:58

파일을 보호하기 위해서는 암호화를 하거나 비밀번호를 거는 방법등 여러가지 방법이 있지만 그중 가장 간단한것은 파일이나 폴더의 권한설정(NTFS)을 변경하는것입니다.
파일이나 폴더의 권한설정을 변경하는 방법은 대걔 탐색기를 이용한 방법을 사용하거나 cacls.exe 파일을 이용합니다. 하지만 탐색기와는 달리 cacls.exe 파일을 이용해서 탐색기처럼 자세한 설정을 할수는 없습니다.

간단한 예를 들어보면 특정폴더에 읽기 권한을 주고 싶다고 할경우 다음과 같이 설정을 하면 됩니다.

탐색기
cacls.exe
탐색기를 이용한 권한설정

CACLS.EXE 파일을 이용한 권한설정

하지만 cacls.exe 파일의 경우 탐색기의 고급처럼 자세한 설정을 할수가 없습니다.  탐색기의 간단한 권한설정메뉴인 모든권한, 읽기, 쓰기, 바꾸기(쓰기) 가 전부입니다.

하지만 이러한 폴더가 한두군데가 아니라면.. 정말 큰일입니다.
이러한 경우에는 다음과 같은 스크립트를 이용하면 쉽게 처리할수 있습니다.

1. c:\test 폴더에 everyone 사용자가 모든권한을 사용하게 한다.
XCACLS.vbs c:\test /E /G everyone:F

2. c:\test 폴더에 대해서 파일을 읽을수만 있게 한다.
XCACLS.vbs c:\test /E /P everyone:X

3. c:\test  폴더내의 하위폴더와 파일를 만들수는 있지만 삭제할수는 없게 한다.
XCACLS.vbs c:\test /E /P everyone:X /D everyone:A7
참조
Xcacls.vbs를 사용하여 NTFS 권한을 수정하는 방법

Posted by Zasfe

댓글을 달아 주세요

컴퓨터2007.11.14 10:02
Scripting.Dictionary
 
데이터베이스를 사용하지 않고 원하는 데이터를 뽑아서 사용하기란 쉽지가 않습니다.
파일로 저장을 해서 읽어오고 저장하고 정리하고 읽어오고 저장하고 읽어오고 저장하고...

물론 배열로 만들면 기준이 되는 데이터를 처음부터 끝까지 반복해서 비교하면 원하는 결과가
나오기는 합니다.

하지만 데이터가 많이지고, 배열을 재정의하는 부분이 중간에라도 나온다면, 나중에 그 코드를 볼때의
느낌은 정말.. 깜깜합니다.
( 제가 만든것을 봐도 제가 하나하나 값을 찍어보고 구조를 판단해야 하더군요. 제가 요즘 부쩍
단기기억력상실이 심해져서요. )
 
우선 배열과 차이점을 꼽아보면 몇가지가 나옵니다.
1. 데이터의 검색 및 추가, 수정, 삭제가 쉽다.
2. 사용법이 간단하다.
3. 모든 데이터를 넣어 사용할수 있다.
  ( 배열조차 넣어서 사용할수 있습니다. 같은 Scripting.Dictionary 조차 넣어서 사용할수 있습니다.)
 
저는 배열의 대용으로 사용을 합니다.
왜냐하면 검색하기 위해 따로 함수를 만들지 않아도 되고, 정렬도 가능해서 여러모로 활용도가
높기 때문입니다.
 
 
다음과 같은 설정값을 가집니다.
속성
- Count : 현재 저장된 개체의 갯수를 반환합니다.
- Item("KeyValue") : KeyValue 라는 키를 이용해서 할당되어 있는 값을 반환합니다.
       키에 값이 없을경우 Null 값을 반환합니다.
- Key("ValueData") : ValueData 라는 값을 가지고 있는 키를 반환합니다.
- CompareMode : Dictionary 개체에서 문자열 키를 비교하는 모드를 설정하여 반환합니다.
 
메서드
- Add Key, Value : 키와 값을 추가합니다. 존재하는 키이면 오류가 발생합니다.
- Remove Key : 지정한 키와 할당되어 있는 키값을 제거합니다. 존재하지 않는 키이면 오류가 발생합니다.
- RemoveAll :  모든 키와 값을 제거합니다.
- Exists(Key) : 지정한 키가 존재하면 True 반환하고, 아니면 False 반환합니다.
- keys : 모든 키들을 배열로 반환합니다.
- Items: 모든 값들을 배열로 반환합니다.
 
 
소스를 보고 설명을 드리겠습니다.
 
'' InsertText   : 입력 되는 키값
' OutputText :  출력 값
1 : Dim objDic
2 : Dim InsertText
3 : Dim OutputText
 
4 : Set objDic =createObject("Scripting.Dictionary")
5 : objDic.Add "Zasfe", "code1"
6 : objDic.Item("Eseit") = "code2"
 
7 : InsertText = "Zasfe"
8 : OutputText = objDic.Item(InsertText)
9 : Wscript.Echo OutputText
10: For each aa in objDic.Keys
11:   wscript.echo aa&" "&objDic.item(aa)
12: Next
 
 
 
가장 간단히 값을 Dictionary개체에 입력하는 방법입니다.
위 코드는 sDic 라는 디렉토리 개체에서 Item값이 "InsertText" 라는 값을 갖는 키값을 반환합니다.
1~3 라인은 변수를 선언하는 부분이고, 4 라인은 Dictionary 개체를 선언하는 부분입니다.
5~6 라인은 Dictionary 개체에 값을 넣는 부분입니다. 2가지의 방법으로 가능합니다.
메서드를 이용한방법(5 라인)과 속성을 이용한 방법(6 라인)이다.
7~9 라인은 Key 값이 "Zasfe" 인 Item 값을 출력하는 부분입니다.
10~12 라인은 모든 키값을 배열로 받아와서 출력하는 방법입니다. 주로 어떤 값이 들어있는지 확인하는 방법으로
사용됩니다.

사용법은 생각보다 간단합니다.

다음은 위 코드의 실행결과 입니다.

Posted by Zasfe

댓글을 달아 주세요

  1. 좋은 정보 감사합니다

    2017.07.07 09:40 [ ADDR : EDIT/ DEL : REPLY ]

컴퓨터2007.10.11 14:53

서버를 관리하는 사람들은 하루에도 엄청난 로그를 남기고 관리한다.
하지만 온갖 잡다한 로그속에서 필요한 로그를 찾기란 정말 힘들다. 그렇다보니 문제가 생기기 전까지 서버상에 기록된로그를 경시하려는 경향이 있다. 봐도 안봐도 그만인 정말 티 안나는 일이 로그 관리이기 때문 이다.

그렇다보니 조금이라도 편하게 관리를 하기 위해서 일부 프로그램이 제공하는것처럼 데이터베이스에 넣는 방법을 생각하게 되었다.
실시간이 아닌 사후처리 라는 점이 문제이기는 하지만 어차피 하루종일 쳐다보고 있지 않을 로그라면 데이터베이스에 넣어두고 사후관리시에도 용이하게 사용할수 있으리라는 막연한 생각때문에 스크립트를 만들기 시작했다.
실행속도와 서버부하를 생각하면 당연 C++ 같은 언어를 사용해야 하지만 VBScript 밖에 모르는 나에게 그것들은
그것들 일뿐이고, 지금 당장 불편함을 해소하기위해 성능은 떨어지더라도 기능에 만족할수 있는 스크립트를 만들었다.

Webkinght Class ( Webknight 로그의 데이터베이스화용 클래스 )

  • 추후 수정이 용이하도록 일반함수의 조합이 아닌 클래스형태 로 제작.
  • 각각의 필드를 개별적으로 반환 함으로써 사용자가 편하게 이용할수 있음.

다만 이 클래스는 웹나이트로그를 라인단위(1줄씩)로 읽어들인 값을 기준 으로 처리하도록 되어있다.
Posted by Zasfe

댓글을 달아 주세요

  1. ㅋㅋㅋ NTFAQ에 링크되었어요~

    2007.11.16 17:24 [ ADDR : EDIT/ DEL : REPLY ]
  2. 제가 링크걸었어요.. ㅋㅋ

    2007.11.19 18:26 [ ADDR : EDIT/ DEL : REPLY ]

컴퓨터2007.10.04 05:10
그동안 중요한 자료는 모두 USB에 담아가지고 다닙니다. 하지만 결코 작은 용량이 아닌 1G USB 디스크의 여유공간이 4mb 밖에 안남는 사태가 발생하고야 말았습니다.
그간 정리하는 습관과는 거리가 멀어 복사붙이기로 분류만 해두었는데 폴더는 점점 많아져서 정리의 엄두가 나지 않았습니다.
 
그러다 찾은것이 "getfoldersize.vbs"
 
오~ 완전 나이스..
게다가 결과물을 텍스트 파일이 아닌 엑셀로 만들어주기까지 한다.
 
 
하지만..
엑셀로 불러오는것보다 커맨드라인으로 바로바로 확인이 가능할거 같다는 생각을 하게되고 좀더 일반적인 환경에서 사용이 가능하도록 스크립트내에서 확인이 가능하도록 변경하였다.
 
■ 변경내용
 - 커맨드라인에서 결과를 바로 확인할수 있도록 변경.
 - 하위폴더까지 나오면서 폴더가 복잡한 구조에서는 보기도 힘들다.
 - 파일용량을 보기 편한 단위로 변경할수 있도록
   
'
' cscript Get_folder_size_cmd.vbs
'
Dim CRLF, TAB :TAB  = CHR( 9 ):CRLF = CHR( 13 ) & CHR( 10 )
Dim Tmp, totalsize
totalsize =0
rootfolder = "Z:\"
Set fso = CreateObject("scripting.filesystemobject")
'Run checkfolder
   CheckFolder (FSO.getfolder(rootfolder))
wscript.echo "totalsize : "&int((FormatNumber(totalsize, 0, , , 0)/1024)/1024/1024) & " GB"
Sub CheckFolder(objCurrentFolder)
       For Each objFolder In objCurrentFolder.SubFolders
 If Instr(objFolder.Path,"RECYCLER") =0 and Instr(objFolder.Path,"System Volume Information") =0 then
         FolderSize = objFolder.Size
  totalsize = totalsize+FolderSize
         Tmp = (FormatNumber(FolderSize, 0, , , 0)/1024)/1024
  If int(Tmp)/1024 > 1 then
          WScript.Echo objFolder.Path& TAB & int(Tmp)/1024 &" GB"
  else
   WScript.Echo objFolder.Path& TAB & int(Tmp) &" MB"
  end if
 end if
       Next
End Sub
 
 
Posted by Zasfe
TAG VBScript

댓글을 달아 주세요

  1. 재밌네요.ㅎㅎ

    2008.08.05 18:31 [ ADDR : EDIT/ DEL : REPLY ]
    • zasfe

      반복작업이 제일 귀찮은 작업이라 ㅋ
      감사합니다.

      2008.08.10 03:03 [ ADDR : EDIT/ DEL ]

컴퓨터2007.05.05 05:59

우선 이번에 배울 스크립트부터 보겠습니다.

㉠ Const CONVERSION_FACTOR = 1048576
㉡ Set objWMIService = GetObject("winmgmts:")
㉢ Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='C:'")
㉣ FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
㉤ wscript.echo Int(FreeMegaBytes)

많이 보던 스크립트 같습니다.. 그렇습니다.. 바로 전에 써먹은 그 남은용량 알아보는
스크립트 입니다. 이해를 돕고자.. 절대 재탕은 아닙니다.. 쿨럭..;;;;

㉠ 부분은 무엇을 의미할까요..
바로 변경을 할수없는 상수를 의미합니다. ( 상수 맞나..;; 언어의 장벽이.. 쿨럭..;;)

이 스크립트는 남은 용량을 MByte 단위로 환산을 하여서 출력하는 것입니다.
바로전에는 직접 나눗셈을 했었죠.
바로전 스크립트와 차이는 없습니다. 다만 상수를 이용해서 값을 먼저 지정하고
사용을 하는이 다를 뿐이죠.

그리고, ㉤ 에보면 Int(변수) 이런 값이 있는데,
Int형(정수)으로 형변환을 시키는 것입니다. 원래 소스점까지 나오는것을 정수부분만
출력하라는 이야기인거죠.

다음은 결과입니다.

G:\Data\Script\tmp\VBS>cscript Win32_LogicalDisk.vbs
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

1095

G:\Data\Script\tmp\VBS>

Posted by Zasfe

댓글을 달아 주세요