'분류 전체보기'에 해당되는 글 744건

  1. 2010.04.14 [util]오타 수정 프로그램 magic xg
  2. 2010.04.13 dcom com com+ 에 대해서
  3. 2010.04.13 [DB] JOIN에 대한 것
  4. 2010.04.12 [browser] opera browser flash plugin disable 방법 1
  5. 2010.03.31 [tfs] [MS SQL] Vista 나 Windows2008 Server 에서 Error 1075 번 에러를 만났다면...
  6. 2010.03.30 [an] get 방식으로 페이지 내용 전송
  7. 2010.02.17 [util] 드라이버 찾기 편한곳
  8. 2010.02.03 [ps] powershell에서 StringBuilder를 쓰자 1
  9. 2010.02.03 iis 튜닝 1
  10. 2010.02.03 [util] 개발자 필수 툴
  11. 2010.01.28 opera 무설치 버전 다운 받는곳
  12. 2010.01.14 [ps] powershell 에서 -eq 와 -ne
  13. 2010.01.14 [ps] 파워셀에서 바로 db에 접근해보자
  14. 2010.01.14 [ps] 오류 메세지를 감추고 싶을때...
  15. 2010.01.14 [ps] 기본문법 3
  16. 2010.01.14 [ps] 파워셀에서 WCF 서비스를 실행하자!! 1
  17. 2010.01.07 [db] query문 에서 변수 설정및 for문 형변환 이용하기
  18. 2010.01.07 [ps] 파일이나 폴더 exist 확인법
  19. 2010.01.07 [db] db 정보 확인 1
  20. 2010.01.07 [db] db 누가 잡고 있는지 알수 있는법과 죽이는법
  21. 2009.12.30 [ps] 파일 소트 방법
  22. 2009.12.15 [ps] if switch 등 기본문법
  23. 2009.12.15 [ps] string형 시간을 DateTime으로 컨버팅하기
  24. 2009.12.14 [db] database 생성 query
  25. 2009.12.07 [ps] 파워셜에서 hashtable쓰기
  26. 2009.12.07 [ps] file copy ,delete 하기
  27. 2009.12.03 [sc] ServerCore 에서 웹서핑을???
  28. 2009.12.03 [ps] WMI를 통한 Hyper-V 관리...
  29. 2009.12.03 [ps] how to run c# code within Powershell
  30. 2009.11.17 [ss] SmoothStreamingMediaElement를 쓴 player 소스
좋은 프로그램2010. 4. 14. 14:27

http://sunjinsu.textcube.com/164


단점은 세벌식 상태에서는 못쓴다는점이지만 편리하다...........


특히 여기 회사처럼 db를 한글로 쓰는 데서는 ㅠ.ㅠ


[#FILE|MagicXG.exe|pds/201004/14/37/|mid|0|0|pds16|0#]

Posted by 동동(이재동)
언어2010. 4. 13. 16:16
COM (Component Object Model)
DCOM (Distributed Component Object Model)
COM+ (Component Object Model+)

COM은 간단히 말해서 프로그램에 사용되는 버튼이나 bar, 메뉴, table등과 같은 것도 되고, 사용자 눈에는 안보이는 fuction일 수도 있습니다.
즉, 그 자체로 특정 기능을 수행하지만, 자기 혼자서는 프로그램이 아닌것으로, 다른 곳에서도 사용이 가능한 것이죠. 예를 들면 버튼이 있는데, 이것은 A라는 프로그램에서도 사용하고, B라는 프로그램에서도 사용할 수 있습니다. 필요하면 그 버턴을 어디든 가져다 사용가능하도록 미리 만들어 두고, 그것을 버튼 컴포넌트라고 부릅니다. 버튼이나 메뉴등 자주 사용하는 것들을 윈도우즈 프로그래밍에서 미리 만들어 두고, 가져다 쓰는 것을 말합니다.(실체는 이중 포인터입니다.)

DCOM이라는 것은 Distributed 라는 분산체제, 즉, 네트웍으로 연결된 COM입니다. 이것은 다른 컴퓨터에 있는 컴포넌트를 자기 컴퓨터에서 사용할 수있도록 해놓은 것입니다.

COM+는 위에 COM/DCOM과 약간 다른 계념으로 MTS라고 불리는 일종에 서비스입니다. 쉽게 말하자면 COM을 네트웍에서 사용가능하도록 해주는 서비스로 windows2000에서부터 지원을 해주기때문에 DCOM을 구지 사용해서 프로그래밍을 하지 않아도 쉽게 네트웍상에서 COM을 가져다 사용할 수있습니다.


위 3가지는 windows가 생기면서 나온 용어들로, 객체지향 프로그래밍을 하고, 윈도우즈 프로그래밍을 하게 된다면 학습중에 최종적으로 거쳐야할 관문입니다. 자신만의 컴포넌트를 만들어서 쓰는 것은 자기만에 함수를 만들어서 쓰는 것과 같지만, 그 사용법이 조금 복잡합니다.
COM을 사용하게 되면 dll 이라는 확장자가 붙은 파일이 필요한데, 한게임같은 게임을 설치하면 거기에 사용되는 dll이 설치가 되는것을 볼 수가 있습니다. 그럼 그때, 아~ dll파일 안에 어떤 컴포넌트를 부르는 함수가 있구나 라고생각하시면 되고, 실제 컴포넌트는 한게임 서버에있는 것이라 생각하세요.


출처 :: 지식인 aoww_seegle (2003-05-16 14:48 작성)님 답변

//--------------------------------------------------------------------------------------

com 은 Component Object Model 의 약자이지만 일반적으로 컴포넌트라고 발음합니다. 정확한 해석은 아니지만 줄여서 부르는 셈이지요.

기존의 프로그램을 살펴보면 여러가지 문제점이 있었지요. 그 많은 문제점중 하나가 예를 들어 dll 의 이름 문제점을 들수 있는데요. 많이 보셨을 겁니다. ****.dll 이라고 하는 파일을요. 이는 메인 프로그램에서 다 처리하지 못하거나 특정한 모듈을 따로 처리하기 위해 만든 일종의 메인에 딸린 하부적인 실행파일이라고 볼수 있는데(일단은 dll 도 실행파일입니다. 자체 실행파일은 아닙니다만...) 이는 dll 의 이름을 가지고 접근하고 있습니다. 하지만 소프트 웨어를 만드는 회사가 많은만큼 같은 dll의 이름을 가진 실행파일들이 많아지고, 또 그것을 인스톨 하면서 윈도우 폴더에 복사하면 문제가 생기지요. 전혀 다른 회사에서 개발한 dll 이 이름만 같고 전혀 다른 기능을 하는데도 이를 모르고 덮어 쓰기 해버리면...

이를 해소하기 위한 하나의 방법이 컴포넌트 입니다. 사용해 보셨는지는 모르지만 컴포넌트는 GUID 라는 128비트의 일종의 아이디 비슷한게 있습니다. 이걸로 접근하므로 이름의 문제로 인한 충돌이 일어나지 않는 것입니다.

여기까지는 com 을 사용하는 목적중의 하나만 예를 든것이고 com 을 한마디로 정의하자면 객체 지향적 모듈개발이라고 정의하고 싶네요. 아니 이건 제가 개인적으로 내린 정의입니다. 제가 느낀 바로는요...^^ 다른 분들은 어떻게 생각하실지 모르겠습니다.

어떤 프로그램을 짤때, 예를 들어 메신져를 생각해 보겠습니다. 메신져를 짜려면 접속자 파악, 파일전송, 메시지 보내기 등의 작업들이 있습니다. 그런데 이경우 com 을 사용하지 않고 짜려면 한사람이 설계한 프로그램에 다른 사람들이 달라붙어서 거기에 맞춰가면서 프로그래밍 할 수 밖에 없습니다. 상당히 비효율적이고 또 그렇게 프로그래밍한 소스는 그 메신져에서 밖에 쓸수가 없죠. 하지만 컴포넌트화 해버리면... 쉽게 말해서 모듈별로 따로 만들어 버리면, 넌 메시지 보내는 루틴을 만들어, 난 파일 전송하는 루틴을 만들게 그리고 만들때는 com 으로 만들자. 라고 하면 쉽게 끝나는 거죠. 조립만 하면 되기 때문이죠.

여기까지 말씀을 드리면 그렇다면 com 은 일정한 형식을 가지고 있어야 한다. 왜냐하면 조립을 하려면 표준형식이 있어야 하기 때문이다. 라고 생각하시는 분이 계실지 모릅니다. 네 맞습니다. 일정한 형식을 맞춰서 프로그램을 짜야 합니다. 그래서 com 을 하시는분들 보면 머리붙잡고 쥐어 뜯습니다.(으아..미쵸미쵸 하면서요...^^ 저도 그런 기억이 있죠) com 의 표준형식을 공부하는게 쉬운게 아니거든요. 그리고 객체지향적 설계가 필요합니다. 그래서 com 에 관해서는 바이블도 따로 나와 있습니다. 공부하시려면 com 은 바이블을 꼭 사셔야 합니다. 아니 꼭은 아니더라도 사시는게 좋습니다. 인터넷으로 공부하려고 하시면... 한계가 보일겁니다.

이외에 책에 적어진 com 의 장점을 적어보겠습니다. 이하는 책에 적혀있는 내용입니다.

1. 이식성이 강하다 : 새로운 프로그램에 대한 강력한 이식성은 개발기간을 단축시킨다.
2. 유연성이 있다 : 컴으로 작업한 소프트웨어를 업그레이드 하고자 할 경우 단순히 업그레이드된 컴포턴트만 복사하면 되고 업그레이드 되지 않은 컴포넌트를 사용하지 않은 경우에도 잘 수행된다.
3. 재 컴파일할 필요가 없다.
4. 객체지향 개발 방법론(com) 은 프로그램의 구현방법을 획기적으로 바꾸었다.
5. com 의 경우 플랫폼에 독립적이다.
Posted by 동동(이재동)
database2010. 4. 13. 11:50

http://k.daum.net/qna/view.html?qid=3we3k


오 잘설명했다~

Posted by 동동(이재동)
브라우저2010. 4. 12. 13:10

그냥


ctrl+f12 (전체)


아니면


f12(사이트 개개인별)


룰러서


콘텐트-플러그인 사용을 체크 해제 하면 된다.

Posted by 동동(이재동)
기타2010. 3. 31. 14:29
이 에러는 FullText Search Service 를 사용하지 못하는 에러인데요...

이 내용을 Google 에서 찾으면

FullText Search Error 1075: The dependency service does not exist or

글을 찾을 수있고요
해결책은 이렇게 하라는 군요...

Try this
1. Open the registry key HKEY_LOCAL_MACHINE\System\CurrentControlSet
\Services\msftesql
2. Rename the value DependOnService to anything
3. Restart the server

여기서
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\msftesql
위 레지스트리를 찾아 보면 값이 "RPCSS NTLMSSP"
로 되어있는데요...

이값을 단순히 수정만 하지마시고
"RPCSS" 만 남기시던...
하셔야 합니다.

전 잘못되면 다시 복구시킬 요량으로
"RPCSS NTLwoojjaMSSP" 요런 식으로 수정해 놨더니만..

그래도 같은 Error 를 내 뱉더군요...
그래서 아예 RPCSS 만 남겨놨죠... ㅋㅋ
그랬더니 잘 실행되는 군요...

이유를 더 찾아 보니..

SQL Server 의 FullText Search 서비스는 실행할때 NTLMSSP (NTLM Security Support Provider)
이 넘을 이용해서 사용자의 권한을 관리자의 권한수준으로 올린다음 실행한다고 하는군요.
그런데 이 서비스는 Vista, Windows Server 2008 로 올라오면서 사라진 서비스라고 하는 군요.(아마도 UAC 가 있으니 있을 필요가 없어졌겠죠...)
여튼 그런데 없어진 서비스를 찾으면서 에러를 발생시킨 것입니다.

훔... 한참 걸렸습니다. ^^;
계속 TFS 깔아야 겠습니다.

TFS 할일이 너무 많아요...(에러나는 게 너무 많아...) ㅋㅋㅋ
Posted by 동동(이재동)
Asp.Net2010. 3. 30. 11:41

머 


Response.Redirect("default2.aspx?temp=haha");


이렇게 get 방식으로 보내고


TextBox2.Text = Request["temp"];


이런식으로 받는다



http://thankee.tistory.com/25

Posted by 동동(이재동)
좋은 프로그램2010. 2. 17. 11:06
http://www.vga.pe.kr/xe/
Posted by 동동(이재동)
Power Shell2010. 2. 3. 08:59

일단 foreach문으로 log를 파일에 이렇게 저장하고 싶었다.


 2010-02-03 오전 8:51:37 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type: 
 2010-02-03 오전 8:48:34 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type:  
 2010-02-03 오전 8:45:31 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type:  


근데 이게  c#처럼 \r\n을 쓸수가 없어서 찾아밨지만 못찾았다...


그래서 그냥 stringbuilder의 appendline()을 이용해서 성공 


$strBld = new-object System.Text.StringBuilder

foreach ($data in $GetJoinDataSet.Tables[0])
{
$ShowJoinInfo= " {0} ({1} " -f $data[3], $data[4];
$strBld.Append($ShowJoinInfo)
$strBld.AppendLine()
}


Set-Content -Path ".\logs\JoinLog.xml" -Value $strBld
}

참고 : http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!811.entry

Posted by 동동(이재동)
Windows 2008 Server Core2010. 2. 3. 08:43
-Disable IIS Logging

-iis 관리자-사이트-로깅-오른쪽 작업탭에서 사용안함 설정
-Tune the MaxPoolThreads registry entry

his setting specifies the number of pool threads to create per processor

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\InetInfo\Parameters

코어당 20개씩 값을 설정((4코어 -> 80, 2코어 -> 40)
-WCF 추적(Tracing) 기능 Disable

-확인결과 이미 web.config에 적용 되어있음

-문서에는 SvcConfigEditor.exe를 이용하라고 함

-자세한 이용법 : http://msdn.microsoft.com/en-us/library/ms732009.aspx
-Configure ASP.NET MaxConcurrentRequests for IIS 7.0 Integrated mode

-이미 WcfAsyncWebUtil 을 이용해서 1000으로 적용되어있음

-C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config 는 스크립트 제작 예정

maxConcurrentRequestsPerCPU ="48" <-- 여기 속성 설정할때 CPU 코어 1개당 12라고 생각하시면됩니다

48으로 설정한 이유는 여기 당진에 들어가있는 컨트롤 서버가 4코어이기때문입니다.

서울사무실에 있는 컨트롤 서버같은 경우는 2코어이기때문에 24가 되겠죠

-수동 방법

c:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config

c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Aspnet.config

&lt;system.web&gt;

&lt;applicationPool maxConcurrentRequestsPerCPU="1000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/&gt;

&lt;/system.web&gt;
-동적 콘텐츠 HTTP 압축 사용

-동적 압축을 사용하면 항상 대역폭을 보다 효율적으로 사용할 수 있지만

서버의 프로세서 사용률이 이미 매우 높은 경우에는 동적 압축에 따른 CPU 부하로 인해 사이트의 성능이 저하될 수 있음

-참조 : http://technet.microsoft.com/ko-kr/library/cc753681(WS.10).aspx

-appcmd set config /section:urlCompression /doDynamicCompression:True
- Web.Config 의 ServiceThrottling 값 변경

Cpu가 2core 일때

maxConcurrentCalls="100" * cpu -> 200

maxConcurrentSessions="300" * cpu -> 600

maxConcurrentInstances = "100" * cpu + "300" * cpu-> 800

이므로 다음과 같습니다.

&lt;serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="600" maxConcurrentInstances="800"/&gt;
-나머지는 asp.net이 아닌 asp 설정이므로 Pass
-참고한 사이트

http://msdn.microsoft.com/en-us/library/ee377064(BTS.10).aspx
Posted by 동동(이재동)
좋은사이트2010. 2. 3. 08:42
http://ankhsvn.open.collab.net/daily/

http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+5.0+Nightly+Builds

http://www.sourcegear.com/diffmerge/downloads.html

http://code.msdn.microsoft.com/sourceanalysis

http://code.msdn.microsoft.com/PowerCommands

http://www.codesector.com/download.php

http://tortoisesvn.net/downloads

http://www.7-zip.org/

http://stylecopforresharper.codeplex.com/

http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx
Posted by 동동(이재동)
브라우저2010. 1. 28. 12:02
Posted by 동동(이재동)
Power Shell2010. 1. 14. 19:07

eq야 equal 로 다 안다 하지만


=! 인건 -ne 이다.



Posted by 동동(이재동)
Power Shell2010. 1. 14. 16:06

$SQLSERVER=read-host "Enter SQL Server Name:"
$Database=read-host "Enter Database Name:"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLSERVER;Database=$DATABASE;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sysobjects where type='u'"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]


이렇게 하면 된다. 이제 sqlcmd.exe 랑은 끝이다~


참고 : http://www.databasejournal.com/features/mssql/article.php/3686216/Microsoft-Windows-PowerShell-and-SQL-Server-2005-SMO--Part-3.htm




Posted by 동동(이재동)
Power Shell2010. 1. 14. 16:05

스크립트를 짜다 보면 빨강색으로 나오는 오류메세지를 감추어야할때가 있다.


try
{
$ErrorActionPreference = "Stop"
$Wcf=New-WebServiceProxy -uri "http://$ControlServerIP/Service.svc?wsdl"
[String]$CastData = $Wcf.GetData("$CastServerIP")
echo "Cast Server GetData is Success. Path : ./Log/CastGetData.xml"
}
catch [SystemException]
{
echo "Cast Server GetData is Failed."
}
Finally
{
Set-Content -Path ".\log\CastGetData.xml" -Value $CastData
}


위에서 $Wcf 함수에서 ip가 틀리면 에러가 나지 않고 바로 catch문으로 가고 싶었다....


하지만 꼭 빨강색에러를 낸후 catch문으로 갔다 그래서 이거를 안나게 하는 방법이 있을까 해서 찾아낸게


$ErrorActionPreference = "Stop"


쓰기 귀찮아서 복사해야지 설명은


핵심은 일반적인 셸 오류 메시지는 예외와 다르다는 점을 이해하는 것입니다. 비종료 오류와 종료 오류가 있는데 종료 오류는 파이프라인 실행을 중지하고 예외를 발생시킵니다. 오직 예외만 트랩이 가능합니다. 오류가 발생하면 셸은 기본 제공 $ErrorActionPreference 변수를 찾아 수행할 작업을 확인합니다. 이 변수의 기본값은 "Continue"입니다. 이는 "오류 메시지를 표시하고 작업을 계속 실행하라"는 의미입니다. 값을 "Stop"으로 변경하면 이 변수는 오류 메시지를 표시하고 트랩 가능한 예외를 생성합니다. 그러나 이는 스크립트의 모든 오류가 예외를 생성함을 의미합니다.


Posted by 동동(이재동)
Power Shell2010. 1. 14. 14:51
참고  : http://channel9.msdn.com/wiki/windowspowershellquickstart/
Posted by 동동(이재동)
Power Shell2010. 1. 14. 13:24

이야 이렇게 쉽게 되다니 뻘짓했다...


$wcf=New-WebServiceProxy -uri "http://172.16.20.84/Service.svc?wsdl"
$wcf | Get-Member


이렇게만 하면 쓸수있고 테스트 데이터를 날릴수가 있다.


참고한 사이트

http://powershellcommunity.org/Forums/tabid/54/aff/1/aft/4283/afv/topic/Default.aspx

http://cglessner.blogspot.com/2008/12/call-wcf-services-with-powershell.html


'Power Shell' 카테고리의 다른 글

[ps] 오류 메세지를 감추고 싶을때...  (0) 2010.01.14
[ps] 기본문법 3  (0) 2010.01.14
[ps] 파일이나 폴더 exist 확인법  (0) 2010.01.07
[ps] 파일 소트 방법  (0) 2009.12.30
[ps] if switch 등 기본문법  (0) 2009.12.15
Posted by 동동(이재동)
database2010. 1. 7. 16:50
--int 변수 설정
Declare @i int
set @i =1

--string형 변수 설정
Declare @resultNum nvarchar(100)

--int형 을 nvarchar로 형변환
set @resultNum = @i

--string 형과 아까 형변환한 string형을 합치기
Declare @temp nvarchar(100)
set @temp = 'Test_'+@resultNum
select @temp

--for 문처럼 증가하기
while @i <= 5
Begin
--Select * from Camera where CameraId = @i
--update Camera set InternalHost = '192.168.3.111' where CameraId=1586
select @i
set @i=@i+1
End



참고한곳 : http://hyubi.net/entry/MS-SQL-변수사용-조건문-반복문-저장프로시져








Internalhost 자동증가 스크립트 (그냥 써놓는거)



Declare @i int
Declare @count int

set @i =1586
set @count = 2

--string형 변수 설정
Declare @resultNum nvarchar(100)

--int형 을 nvarchar로 형변환
set @resultNum = @count


--string 형과 아까 형변환한 string형을 합치기
Declare @temp nvarchar(100)
--set @temp = 'rtsp://172.16.40.143/'+@resultNum +'_SD.mov'
--select @temp

--for 문처럼 증가하기
while @i <= 1610
Begin
set @resultNum = @count
set @temp = 'rtsp://172.16.40.143/'+@resultNum +'_SD.mov'
update Camera set InternalHost = @temp where CameraId=@i
select @i
set @i=@i+1
set @count=@count+1
End

'database' 카테고리의 다른 글

[db] DECLARE로 정의한 함수 보기  (0) 2010.04.19
[DB] JOIN에 대한 것  (0) 2010.04.13
[db] db 정보 확인  (1) 2010.01.07
[db] db 누가 잡고 있는지 알수 있는법과 죽이는법  (0) 2010.01.07
[db] database 생성 query  (0) 2009.12.14
Posted by 동동(이재동)
Power Shell2010. 1. 7. 13:31
if (test-path $LogFolder)
{
# echo "Exist folder"
}
else
{
mkdir $LogFolder

}


폴더나 파일도 다 test-path로 할수 있다.

Posted by 동동(이재동)
database2010. 1. 7. 13:28
exec sp_helpdb
exec sp_helpfile
dbcc Loginfo

select * from sysfiles


아마 파일 사이즈 보는것일꺼다. 


이것과 아니면 sp_who, so_who2가 있다.


Posted by 동동(이재동)
database2010. 1. 7. 13:28
sp_who,sp_who2
-잠금을 하는 사람이 누군인지 볼수 있다.

kill 'spid' 로 죽인다.


Posted by 동동(이재동)
Power Shell2009. 12. 30. 15:34

$dirs = dir $BackupFolder | sort @{expression={$_.LastWriteTime}}    


출처 : http://stackoverflow.com/questions/520437/bash-dos-powershell-script-to-list-most-recent-versions-of-files


Posted by 동동(이재동)
Power Shell2009. 12. 15. 21:41

유닉스의 전통적인 장점은 내장 스크립트를 지원하는 셸과 스크립트 작성에 요긴한 명령행 유틸리티를 풍부하게 보유하고 있다는 점입니다. 반면 윈도는 스크립트라고는 도스 시절부터 그대로 내려온 배치 파일이 고작인데, 문법과 기능이 너무 조악한 관계로 요즘 사용자들의 눈높이로는 스크립트라고 부르기도 민망한 수준입니다. 

많은 용도가 있지만 스크립트가 유용하게 쓰이는 분야는 특히 서버 운영의 자동화입니다. 유닉스가 그 동안 윈도에 완전히 압도 당하지 않고 시장에서 꾸준히 생존해 온 이유 중 하나가 스크립트를 잘 지원한 덕분이기도 했습니다. 하지만 이 우위는 작년에 마이크로소프트가 야심적으로 발표한 PowerShell이란 새로운 셸에 의해 도전을 받게 된 듯 합니다.

버전 1.0이란 태그를 달고 첫선을 보인 PowerShell(이하 PS)은 특이하게도 네이티브 Win32가 아닌 닷넷 프레임워크 2.0 기반의 애플리케이션입니다. 윈도 XP에서는 운영 체제의 일부로 %SystemRoot%\System32 디렉토리 밑에 설치됩니다. 지난 며칠 동안 살펴 본 PS는 일단 스크립트 언어의 문법이 펄과 아주 유사하게 생겼지만 완전히 같지는 않고, 파이썬과 비슷하게 대화형 모드를 기본 지원하며, 유닉스처럼 파이프의 사용에 크게 의존하고, 전체적인 명령과 문법이 상당히 일관적이고, 닷넷 런타임과 쉽게 연동 가능하며, 최신 기술 답게 유니코드 인코딩과 문자셋간 변환 등을 잘 지원합니다. 펄과도 비슷하고, 파이썬과도 비슷하고, 유닉스와도 비슷하면서 닷넷과 연동된다니, 일단 뭔가 거대한 것이 있을 듯한 느낌이 들었습니다만... :-) 학습 난이도는 유닉스 셸 프로그래밍 경험이 있는 사용자라면 누구나 어렵지 않게 배울 수 있을 것 같고, 특히 펄 사용자라면 아주 빨리 적응할 것 같습니다.

저도 아직 맛보기만 몇 가지 해본 정도라서 고급 내용을 소개하기는 어렵고, 오늘은 간단한 실행법만 소개하도록 하겠습니다.

PS를 실행하면 cmd.exe를 실행한 것과 비슷한 화면이 뜹니다.
Windows PowerShell
Copyright (C) 2006 Microsoft Corporation. All rights reserved.

PS C:\Documents and Settings\Hwychol.AHN>

이 상태에서 파이썬처럼 간이 계산기로 사용이 가능합니다:
PS C:\Documents and Settings\Hwychol.AHN> 100/13
7.69230769230769

역시 파이썬과 마찬가지로 명령행에서 바로 변수를 사용할 수도 있는데, 변수는 이름 앞에 $를 붙입니다(어디서 많이 보던 방식이지요? :-) 변수는 사용하기 전 정의하거나 타입을 지정할 필요가 없어서 아래처럼 바로 사용이 가능합니다:
PS C:\Documents and Settings\Hwychol.AHN> $a = 1
PS C:\Documents and Settings\Hwychol.AHN> $a
1
PS C:\Documents and Settings\Hwychol.AHN> $a+1
2

명령행에서 바로 치는 것 말고 스크립트 파일로 저장해서 실행할 때는 확장자로 .ps1을 붙입니다. 나중에 버전 2, 3, ...이 나왔을 때 끝의 숫자로 구분하기 위한 모양입니다. 아무 에디터로 다음 내용을 입력한 다음 test.ps1라고 저장해 봅시다:

$a = 1
$a


이렇게 한 다음 명령행에선

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1


이라고 쳐서 실행합니다. 현재 디렉토리에 있는 스크립트를 실행할 때 .\를 앞에 꼭 붙여야 한다는 점을 유의해야겠습니다(이 점도 유닉스의 영향을 받은 부분이군요).

그런데 실제로 위의 명령을 실행하려고 하면

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1
File C:\Documents and Settings\Hwychol.AHN\test.ps1 cannot be loaded because the execution of scripts is disabled on this
system. Please see "get-help about_signing" for more details.
At line:1 char:10
+ .\test.ps1 <<<<


라고 무시무시한 에러가 나 버립니다. 이런 황당함이란...ㅡ.ㅡ 사실 이 에러는 보안상 의도된 것으로, 실행 정책을 변경해 주어야 스크립트 실행이 가능해집니다. 실행 정책의 변경은 아래 명령으로 합니다:

PS C:\Documents and Settings\Hwychol.AHN> Set-ExecutionPolicy RemoteSigned


제대로 바뀌었는지 Get-ExecutionPolicy로 확인할 수 있습니다:

PS C:\Documents and Settings\Hwychol.AHN> Get-ExecutionPolicy
RemoteSigned


참고로 PS는 대소문자 구별에 관대하기 때문에 set-executionpolicy, get-executionpolicy, remotesigned라고 쳐도 됩니다.

이제 다시 test.ps1을 실행해 보면 결과가 정상적으로 출력되는 것을 볼 수 있습니다:

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1
1

PS 스크립트는 C나 펄 계열처럼 들여쓰기를 자유롭게 할 수 있습니다. 아래 예에서는 보기 좋게 하려고 일부러 줄을 많이 바꿨지만 전체 문장을 한 줄로 써도 됩니다.

코멘트

셸 스크립트라 그런지 코멘트는 싱글 라인 코멘트 #만 쓸 수 있습니다.

크기 비교 연산자

C에 대응하는 PS의 크기 비교 연산자는 다음과 같습니다.



-gt, -lt 같은 이해하기 힘든 기호를 쓰는 이유는 >, < 기호를 리디렉션 용도로 쓰기 때문입니다. 그렇지만 일단 익히고 나면 유닉스 셸이나 펄을 배울 때 연산자를 다시 익힐 필요가 없는 장점이 보너스로 생깁니다.

연산자는 결과로 참 아니면 거짓을 리턴합니다. 즉,

PS> 7 -eq 5
True


이 되겠습니다.

이들 크기 비교 연산자를 -and, -or 등의 논리 연산자와 섞어 쓰면 훌륭한 식이 됩니다. 예를 들어

PS> (7 -lt 10) -and (5 -gt 3)
True


기본 문법(?)을 익혔으니 이제는 제어 구문을 하나씩 들여다 보기로 하겠습니다.

if 문

if ($count -lt 5) # $count가 5보다 작으면
{
"foo!"
}
elseif ($number -gt 1000) # 그렇지 않고 $number가 1000보다 크면
{
"bar!"
}
else # 이것도 저것도 아니면
{
"duh!"
}


elsif 대신 elseif라는 점을 제외하고는 펄과 거의 같습니다. {, } 기호는 필수라서 블럭 안에 문장이 하나만 있어도 생략하면 안됩니다.

switch 문

switch ($count)
{
{$_ -lt 5} # $_가 5보다 작으면 다음 블럭을 실행
{ "foo!" }

10 # { $_ -eq 10 }의 축약형. "case 10:"이라고 읽으면 됩니다.
{ "bar!" }

default # C의 default: 와 같음
{ "duh!" }
}


switch 문내에서 쓰이는 $_ 변수는 switch 괄호안의 결과값을 뜻합니다. 여기서는 $count의 값이 되겠습니다.

for 문

for ($i = 0; $i -lt 10; $i++)
{
"foo!"
}


for문은 그다지 특별한 점이 없는 것 같군요.

while 문

while ($i -le 10)
{
"foo!"
}


while도 마찬가지.

foreach 문

foreach ($i in 1..5)
{
$i
}


요즘 유행하는(?) foreach가 PS에도 있습니다. 위에서는 1부터 5까지로 이루어진 배열(1..5)로부터 하나씩 값을 받아 화면에 찍습니다. 이 foreach는 상당히 재미있는 형태로 응용할 수 있는데, 예를 들어 위의 문장을 파이프를 쓰는 형태로

1..5 | foreach { $_ }


라고 써도 같은 결과가 나옵니다. foreach의 오묘한 세계는 따로 뽑아 단독 특집을 꾸며도 재미있을 듯...

do...while 문

$i = 1;
do
{
$i ; $i++ # 한 줄에 명령을 여러 개 쓸 때에는 ;로 구분합니다
}
while ($i -lt 10)


do...while문은 별로 안쓰는 루프지만 PS에도 있군요. 뜻은 다른 언어에서와 마찬가지로 '~할 동안 실행하라'가 되겠습니다. $i가 10보다 작을 동안 루프를 계속 돕니다.

do...until 문

$i = 1;
do
{
$i ; $i++
}
until ($i -gt 10)


do...until 문은 do...while 문과 반대로 '~할 때까지 실행하라'는 뜻입니다(파스칼의 repeat...until과 같은 용법?). 위 예에서는 $i가 10보다 커질 때까지 루프를 계속 돕니다.
목록


http://cafe.naver.com/ArticleRead.nhn?clubid=12200394&page=1&menuid=50&boardtype=&articleid=4145

Posted by 동동(이재동)
Power Shell2009. 12. 15. 21:33
Function DeleteExpireBackupFolder
{
[String]$Date = Get-Date -UFormat "%m%d%y(%H;%M;%S)"

$dirs = dir $BackupFolder

foreach ($folderName in $dirs)
{
[string] $FolderDate = "{0}/{1}/{2}" -f $folderName.ToString().Substring(0,2), $folderName.ToString().Substring(2,2),$folderName.ToString().Substring(4,2)
[string] $NowDate = "{0}/{1}/{2}" -f $Date.ToString().Substring(0,2),$Date.ToString().Substring(2,2),$Date.ToString().Substring(4,2)

$FolderDateToDateTime = [System.DateTime]$FolderDate
$NowDateToDateTime = [System.DateTime]$NowDate
$AddFolderDateToDateTime = $FolderDateToDateTime.AddDays(14)

if($AddFolderDateToDateTime -lt $NowDateToDateTime)
{
Remove-Item $BackupFolder$folderName -Recurse -Force
echo "Deleted $BackupFolder$folderName"
}
}

}


[#FILE|LogBackup.ps1|pds/200912/15/37/|mid|0|0|pds17|0#]


'Power Shell' 카테고리의 다른 글

[ps] 파일 소트 방법  (0) 2009.12.30
[ps] if switch 등 기본문법  (0) 2009.12.15
[ps] 파워셜에서 hashtable쓰기  (0) 2009.12.07
[ps] file copy ,delete 하기  (0) 2009.12.07
[ps] WMI를 통한 Hyper-V 관리...  (0) 2009.12.03
Posted by 동동(이재동)
database2009. 12. 14. 13:25

USE master
GO
CREATE DATABASE sample /* 데이터베이스 이름 */
ON (
NAME = sample_dat, /* 데이터 파일 이름 */
FILENAME = 'd:\DBdata\sample_dat.mdf', /* 데이터 파일 위치 */
SIZE = 100 MB, /* 데이터 파일 초기 크기 */
MAXSIZE = 1 GB, /* 데이터 파일 최대 크기 */
FILEGROWTH = 100 MB) /* 데이터 파일 증가량 */
LOG ON (
NAME = sample_log, /* 로그 파일 이름 */
FILENAME = 'e:\DBlog\sample_log.ldf', /* 로그 파일 위치 */
SIZE = 20 MB, /* 로그 파일 초기 크기 */
MAXSIZE = 500 MB, /* 로그 파일 최대 크기 */
FILEGROWTH = 50 MB) /* 로그 파일 증가량 */
GO


이렇게 하라고 적혔있는데 사실


CREATE DATABASE iCONTROL_Data /* 데이터베이스 이름 */
ON (
NAME = iCONTROL_Data, /* 데이터 파일 이름 */
FILENAME = 'c:\iCONTROL Server\iCONTROL Database\iCONTROL_Data' /* 데이터 파일 위치 */
)
GO

이렇게만 해도 된다. 깔끔하게~


http://phpdev.co.kr/gnuboard4/bbs/board.php?bo_table=mssql_gu&wr_id=6

Posted by 동동(이재동)
Power Shell2009. 12. 7. 11:32
이상하다 분명히 포스트 한거 같은데 안되어있네.........



$IpHashTable =@{}

$IpHashTable.add("$count",$addr)



이렇게 하면 되는듯



부를땐



$IPAddress = $IpHashTable.get_Item($SelectValue)







Function ShowAllIP

{

$IPconfigset = Get-WmiObject Win32_NetworkAdapterConfiguration

$IpHashTable =@{}

$count = 0



foreach ($IPConfig in $IPConfigSet)

{

if ($Ipconfig.IPaddress)

{

foreach ($addr in $Ipconfig.Ipaddress)

{

$IpHashTable.add("$count",$addr)

" {0} : IP Address : {1}" -f $count, $addr;

$count++

}

}

}



InputIP $IPHashTable

}



Function InputIP

{

param([System.Collections.HashTable]$IpHashTable )

Write-Host "Choose IP Address"

[String]$SelectValue = Read-Host "select number:"

$IPAddress = $IpHashTable.get_Item($SelectValue)

echo "SELECT VALUE = $SelectValue"

echo "IP = $IPAddress"



MakeSite($IPAddress)

}



일단 이거 ip가져와서 list에 뿌리는건데 참조하자(내가 만듬)
Posted by 동동(이재동)
Power Shell2009. 12. 7. 10:41
http://technet.microsoft.com/ko-kr/library/ee156818(en-us).aspx

http://www.activexperts.com/activmonitor/windowsmanagement/powershell10/0032/



xcopy 를 써두 되는데 모양새가 안나니까

Copy-Item을 쓴다

옵션에 -recurse를 쓰면 하위폴더도 다 카피된다.



지울때는 -force를 써서 강제로 지운다
Posted by 동동(이재동)
Windows 2008 Server Core2009. 12. 3. 09:49
왜 아무도 안찾을까?



현재 우리 시스템은 웹기반으로 한 WCF 이다..



그래서 항상 웹서비스자 제대로 올라갔는지 확인하기 위해서 노트북이나 다른시스템에서 웹브라우저를 띄워 서비스가



잘돌아가는지 확인하였다.. 하지만 이젠 그럴필요가 없다..!!!



리눅스에서도 쓰는것이기도 하지만



lynx for windows 브라우저 가 있기 때문이다.



다운은



http://pachome1.pacific.net.sg/~kennethkwok/lynx/index.html



여기서 받았고



http://kb.iu.edu/data/aczi.html



여기를 참고해서



웹페이지를 파일에 저장하는 방법을 알았다....



결국 이렇게 사용하면 된다.



lynx.exe -source http://URL > page.htm



이렇게하면 해당 url을 htm에 저장한다.



나는 웹서비스 wsdl 페이지를 저장하면 되는것이다. ㅎㅎ



이제 파워셀로 검증하는 방법이 남았다.
Posted by 동동(이재동)
Power Shell2009. 12. 3. 09:16
http://blogs.technet.com/koalra/archive/2008/03/31/wmi-hyper-v.aspx
Posted by 동동(이재동)
Power Shell2009. 12. 3. 09:03











출처 http://powershell.com/cs/media/p/133.aspx





Posted by 동동(이재동)
Smooth Streaming2009. 11. 17. 09:27

한화면에 20개를 표출하게 for문으로 돌렸다...(현재 for문은 test로 주석처리함)


여기소스는 MediaElemet랑 SmoothStreamingMediaElement 둘다 쓴거를 panel에 add시킨것이다...


보면 알듯[#FILE|SmoothStreamingTest.zip|pds/200911/17/37/|mid|0|0|pds16|0#]


Posted by 동동(이재동)