2010. 9. 15. 19:17

 

현재 도메인에서 파워쉘이 기본적으로 로드하는 .NET Assembly 리스트를 아래의 명령어로 알 수 있습니다.

[System.AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object { split-path $_.Location -leaf } | Sort-Object



등록된 어셈블리 외에 추가로 어셈블리를 로드 할 때는

[reflection.assembly]::LoadWithPartialName(“”) 

 = application 디렉토리나 global assembly cache 로부터 assembly를 로드합니다.

 원본: http://vstarmanv.tistory.com/entry/NET-Assembly-load

'Powershell > @우주인' 카테고리의 다른 글

Add-PSSnapin  (0) 2010.09.15
PowerShell Default Snap-Ins  (0) 2010.09.15
[MSSQL]WMI for SQL Management(1)  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
Posted by 알 수 없는 사용자
:
2010. 9. 15. 19:17

이번엔 WMI(Windows Management Instrument) 를 이용해 SQL서버를 관리하는 방법에 대해 말씀드릴려고 합니다.

SQL를 관리를 위한 WMI Object 를 아래처럼 가져올 수 있습니다.

이 오브젝트는 클래스들의 인스턴스 집합이기 때문에 SQL를 위한 네임스페이스를 사용합니다

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 –list | Where-Object {-not ($_.Name -like ‘__*’)}

[2005] 의 경우 -namespace root\Microsoft\SqlServer\ComputerManagement



많은 클래스들이 있지만 우선 SQL Service 클래스를 살펴보면

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService | Select-Object ServiceName, DisplayName, SQLServiceType, State, ProcessId | Format-Table -wrap


설치된 SQL 기본 인스턴스들을 확인할 수 있습니다.

여기서 Service States 가 나타내는 숫자는 아래와 같은 의미를 가집니다.

1 Stopped. The service is stopped.

2 Start Pending. The service is waiting to start.

3 Stop Pending. The service is waiting to stop.

4 Running. The service is running.

5 Continue Pending. The service is waiting to continue.

6 Pause Pending. The service is waiting to pause.

7 Paused. The service is paused.



 

그럼 여기서 사용할 수 있는 메소드들을 확인해 볼까요

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 –class SqlService | Get-Member -MemberType method



여기선 주로 서비스 계정을 설정 하거나 서비스를 시작 중지 시키는 메소드들 뿐이네요.


위의 메소드를 활용해서 MSSQL Server Instance 계정을 local system에서 도메인 계정으로 변경해 볼까요


$strUser = "DOMAIN\account"

$strPass= "비밀번호"

$wSqlservice = Get-WmiObject –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='MSSQLSERVER'"

$wSqlservice.SetServiceAccount($strUser, $strPass)

$wSqlservice.StopService()

$wSqlservice.StartService()



그럼 이번엔 SQL Agent Service를 자동으로 실행되게 변경해 볼까요

$sqlservice = Get-WmiObject –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='SQLSERVERAGENT'"

$sqlservice.SetStartMode(2)

#2 Service is started automatically

#3 Service is started manually

#4 Service is disabled




변경이 잘 되었네요 ^^

 


참고로 –computerName 이란 프로퍼티를 이용하면 원격지의 WMI Object를 가져올 수 있습니다.

Get-WmiObject .computerName 컴퓨터이름 -namespace

root\Microsoft\SqlServer\ComputerManagement10 -class SqlService -filter

"ServiceName=’MSSQL`$Instance’"




다음편엔 ServerNetworkProtocolProperty 클래스를 확인해 볼 예정입니다.

참고: SQL Server Administration with Windows PowerShell

원본: http://vstarmanv.tistory.com/entry/MSSQLWMI-for-SQL-Management1

'Powershell > @우주인' 카테고리의 다른 글

PowerShell Default Snap-Ins  (0) 2010.09.15
.NET Assembly load  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
파워쉘 버전  (0) 2010.09.09
Posted by 알 수 없는 사용자
:
2010. 9. 15. 18:10
안녕하세요. 엉스데브 입니다.

이번에는 PowerShell 로 윈도우 내장 방화벽을 다루는 방법에 대해 알아보겠습니다.

0. PowerShell 에서 내장 방화벽을 다루기 위한 방법.
PowerShell 에 내장 된 관련 명령어는 없지만, "HNetCfg.FwMgr" Com 개체를 이용해서 다룰 수 있습니다.
아래 명령어를 통해 Com 객체를 만들 수 있습니다.

$FireWallMgr = New-Object -ComObject HNetCfg.FwMgr

1. 현재 방화벽이 켜져 있는지 꺼져 있는지 확인 및 켜기/끄기.
아래 명령어로 현재 방화벽이 켜저 있는지 꺼져 있는지를 확인 할 수 있습니다.
$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled
리턴 값이 True 이면 켜져있는 상티이고, False 이면 꺼져있는 상태입니다.

방화벽이 켜거나 끄려면 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled = $True  # 방화벽 켜기
$FireWallMgr.LocalPolicy.CurrentProfile.FirewallEnabled = $False  # 방화벽 끄기

2. 현재 방화벽 설정 조회하기
현재 열려있는 포트(룰)을 조회 하려면 다음과 같이 입력하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts

3. 특정 룰이 있는지 확인 및 선택하기.
만약, 21번 포트가 방화벽에서 열려있는지(여는 룰이 존재하는지) 확인 해 보려면 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Port -eq "21"}

만약, 이름에 SNMP 라는 키워드가 포함되는 이름을 가진 룰을 찾아보려면, 아래와 같이 하면 됩니다.

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}

4. 룰 추가 하기.

$FireWallRule = New-Object -ComObject HNetCfg.FwOpenPort;
$FireWallRule.Name = "룰 이름"
$FireWallRule.Port = "열 포트(0-65535))"
$FireWallRule.Enabled = "활성화 여부($True or $False)"
$FireWallRule.Protocol = "프로토콜 지정. TCP 일 경우 6, UDP 일 경우 17)"

$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add($FireWallRule)

5. 룰 삭제하기.
만약, 이름이 Test 인 룰을 삭제하고자 한다면, 아래와 같이 하면 됩니다.

$toDeleteFireWallRule = $FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "Test"} # 룰을 선택하고,

$toDeleteFireWallRule | %{$FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove($_.Port, $_.Protocol)} #파이프로 넘겨서 삭제 메소드 호출.


6. 룰 활성화/비활성화 하기
만약, 이름에 SNMP 라는 키워드가 포함되는 이름을 가진 룰을 비활성화 하려면, 아래와 같이 하면 됩니다.

($FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}).Enabled = $False

활성화 하려면, 아래와 같이 실행 하면 됩니다.

($FireWallMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts | Where-Object {$_.Name -Like "*SNMP*"}).Enabled = $True


오늘은 여기까지 입니다.

감사합니다.
Posted by 알 수 없는 사용자
:
2010. 9. 15. 17:54
안녕하세요? 윈디안입니다.

가을이 오고 있네요 모두 감기 조심하세요.
전 벌써 감기가 와서 골골하네요 ㅠㅠ

오늘 소개할 것은 iPowerShell입니다.
아이팟,아이폰 이후 i가 붙는 제품이 많아지네요.

이름이 i(?)Powershell 입니다.이 녀석도 느낌이 오시지요?

이름 처럼 아이폰 APP으로 Powershell Cmdlets들과 설명을 볼 수 있습니다.
아이폰,아이팟터치,아이패드에서 사용할 수 있습니다.
위 기기들은 Apple app Store를 통해서 다운로드를 받을 수 있습니다.



Cmdlets,Aliases,Providers들을 지원하며 가로보기 모드,확대가 지원됩니다.
(기본 cmdlet및 Exchange, 써드파티 모듈에 대한 정보도 제공합니다.)

item으로 검색해 보겠습니다.
잘나오네요 ^^;

Search 기능을 통해 원하는 명령을 간편하게 검색할 수 있습니다.
급할때 유용할 것 같습니다.

세상이 너무 좋아졌어요.
파워쉘도 스마트폰으로 스마트하게~ ㅎㅎ

이상 윈디안이였습니다.
감사합니다. :)

출처: http://blog.sapien.com/index.php/2010/03/01/ipowershell-v-2-now-available-in-apple-app-store/
Posted by 알 수 없는 사용자
:
2010. 9. 9. 11:54

자신이 쓰고 있는 파워쉘의 버전을 알아봐야 할경우가 있습니다.
이럴 경우 다른명령어들은 보통 명령어 -help 나 -version을 통해 자신의 버전을 쉽게확인할 수 있으나
파워쉘의 경우 powershell ~~ 로 한참 뒤져바야 답은 나오지 않습니다.

대신 get-host 라는 cmdlet를 이용하시면 됩니다.



원본: http://vstarmanv.tistory.com/entry/파워쉘-버전

'Powershell > @우주인' 카테고리의 다른 글

[MSSQL]WMI for SQL Management(1)  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
PowerShell Profile Configuration  (2) 2010.09.09
PowerGUI Visual Studio  (2) 2010.07.29
Posted by 알 수 없는 사용자
:
2010. 9. 9. 11:35


안녕하세요 @우주인입니다.

파워쉘에서도 리눅스의 bash_profile과 같이 쉘의 초기환경설정을 진행할 수 있습니다.


우선 경로는.. (ISE 기준)

Space>$profile

C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

 

실행창을 쓰신다면 똑같이 아래와 같이 실행하시면 됩니다.



초기에 권한 문제로 실행이 불가능합니다.. 권한을 바꿔줍니다.


set-executionpolicy Unrestricted.


많은 권한을 주려면

set-executionpolicy RemoteSigned

권한이 주어준 후 위의 스크립트 파일에 명령을 실행할 수 있습니다. 초기에 해당 파일은 대다수 없으므로 수동으로 만들어 줍니다.
 

C:\Users\jaguly\Documents> mkdir WindowsPowerShell
C:\Users\jaguly\Documents> cd .\WindowsPowerShell
C:\Users\jaguly\Documents\WindowsPowerShell> Out-File Microsoft.PowerShellISE_profile.ps1
C:\Users\jaguly\Documents\WindowsPowerShell> notepad Microsoft.PowerShellISE_profile.ps1


만든 파일에 아래와 같은 내용을 기입하면 초기 세팅이 가능합니다.

 

참고로 (실행창 powershell.exe 실행기준)

InstallDirectory/Microsoft.PowerShell_profile.ps1 – 모든 사용자에 대한 파워쉘 프로필설정

Document/WindowPowerShell/Microsoft.PowerShell_profile.ps1 – 특정 사용자에 대한 파워쉘 프로필설정

 


(Get-host).ui.rawui.windowtitle="Space Shell"        #제목표시줄 수정

Function prompt {"Space>"}                              #명령프롬프트수정

set-location c:\                                             #초기 디렉토리 설정

cls

 

# welcome message

"You are now entering PowerShell : " + $env:Username       #greeting 메시지




원본: http://vstarmanv.tistory.com/entry/PowerShell-Profile-Script-Confiration

'Powershell > @우주인' 카테고리의 다른 글

[MSSQL]WMI for SQL Management(1)  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
파워쉘 버전  (0) 2010.09.09
PowerGUI Visual Studio  (2) 2010.07.29
Posted by 알 수 없는 사용자
:
2010. 8. 25. 17:26

안녕하세요. 엉스데브 입니다.

지난번 "PowerShell 을 통해 IIS 관리하기"(링크) 포스트를 통해 잠깐 다뤄봤던 WebAdministration 모듈을 통해
이번엔 FTP 사이트를 만들어 볼까 합니다.(Windows 2008 R2, IIS 7.5 환경 입니다.)

먼저, 파워쉘을 켜고 WebAdministration 모듈을 Import 합니다.



New-WebFtpSite cmdlet 으로 새 FTP 사이트를 만듭니다.


기본적으로 FTP SSL 설정이 무조건 SSL 연결이 필요하도록 되어 있는데, SSL 연결을 사용하지 않을 예정이므로, 변경 해 줍니다.


FTP 인증에 기본 인증(서버의 로컬 계정을 사용해서 로그인)을 사용하도록 설정 해 줍니다.


이제 FTP 에 접속 하게 할 사용자(로컬 계정)를 만들어 주고..(링크 참조)


이 사용자가 해당 FTP 사이트에 접속 권한을 가지도록 권한 부여 규칙을 설정 해 주면, FTP 사이트 만들기가 완료됩니다.


잘 접속 되는지 테스트는 아래와 같이 해 보면 됩니다.


음! 잘 되는군요. ^^

WebConfiguration 관련 cmdlet 을 사용 할 때 가장 어렵게 느껴지는 부분은 
'-Filter' 파라미터로 설정 항목의 경로를 지정 해 주는 부분인것 같습니다.

설정항목의 경로는 applicationHost.config 파일의 내용을 참고로 찾아냅니다.
applicationHost.config 파일은 IIS 의 모든 설정이 정의되어 있는 파일이며,
XML 형식의 파일이라 XML 및 XPath 에 대해 어느정도는 알고 있어야 내용을 파악 및 원하는 경로를 정확히 뽑아 낼 수 있습니다.

아래 명령어로 applicationHost.config 파일을 바로 열어 볼 수 있습니다.


오늘은 여기까지 입니다. 제가 정리한 내용이 보시는 분들께 도움이 되기를 바랍니다.

<참고 URL>
http://www.yusufozturk.info/windows-server/setting-ftp-server-authorization-with-powershell-on-iis7-5.html

Posted by 알 수 없는 사용자
:
2010. 8. 25. 13:26
안녕하세요. 엉스데브 입니다.

PowerShell 에서 zip 파일을 다루기 위한 함수를 몇개

Windows 2008 R2 서버에서 PowerShell 을 이용해 웹 사이트를 구축하는 중입니다.
헌데 소스 파일이 zip 으로 압축 되어 있어서 PowerShell 에서 zip 압축을 풀 수 있는 도구가 필요 했습니다.
구글링을 해 보니, 바로 사용할 수 있는 zip 파일 처리 함수를 몇 개 찾을 수 있었습니다. 아래에 정리 합니다.

1. zip 파일 압축 풀기.
function Extract-Zip
{
  param([string]$zipfilename, [string] $destination)

  if(test-path($zipfilename))
  { 
    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)
    $destinationFolder = $shellApplication.NameSpace($destination)
    $destinationFolder.CopyHere($zipPackage.Items())
  }
}
@ 사용법 : Extract-Zip C:\test\zipfile.zip c:\test\destination

2. zip 압축파일 새로 만들기.
function New-Zip
{
  param([string]$zipfilename)
  set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
  (dir $zipfilename).IsReadOnly = $false
}

3. 이미 존재하는 zip 압축 파일에 파일 추가하기.(파이프 라인 이용)
function Add-Zip
{
  param([string]$zipfilename)
 
  if(-not (test-path($zipfilename)))
  {
    set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    (dir $zipfilename).IsReadOnly = $false 
  }
 
  $shellApplication = new-object -com shell.application
  $zipPackage = $shellApplication.NameSpace($zipfilename)
 
  foreach($file in $input)
  {
            $zipPackage.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
  }
}

4. zip 파일 내부 파일 목록 확인.
function Get-Zip
{
  param([string]$zipfilename)
  if(test-path($zipfilename))
  {
    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)
    $zipPackage.Items() | Select Path
  }
}

잘 작동하고, 유용하게 사용하고 있습니다. 다만, 경로를 지정 할 때 상대 경로로 지정 할 경우 오류가 발생 하더군요..
전 사용하다 보니 이 부분이 좀 불편해서 아래와 같이 고쳐서 사용하고 있습니다.

# 압축 풀기.
function Extract-Zip
{
  param([string]$zipfilename, [string] $destination=".") #목적지 기본값은 현재 디렉토리

  #상대경로를 절대경로로 변경
  $zipfilename = (Get-Item $zipfilename).FullName
  $destination = (Get-Item $destination).FullName


  if(test-path($zipfilename))
  { 
    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)
    $destinationFolder = $shellApplication.NameSpace($destination)
    $destinationFolder.CopyHere($zipPackage.Items())
  }
}

# 압축 하기
function Add-Zip
{
  param([string]$zipfilename)

  # 파일 명만 지정 했을 때 상대경로로 지정 해 줌.
  if(!$zipfilename.Contains("\"))
  {
    $zipfilename = ".\" + $zipfilename
  }


  if(-not (test-path($zipfilename)))
  {
    set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    (dir $zipfilename).IsReadOnly = $false 
  }

  #상대경로를 절대경로로 변경
  $zipfilename = (Get-Item $zipfilename).FullName

 
  $shellApplication = new-object -com shell.application
  $zipPackage = $shellApplication.NameSpace($zipfilename)
 
  foreach($file in $input)
  {
            $zipPackage.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
  }
}

profile 파일에 이 함수를 넣어두고 요렇게 사용하면 됩니다.




<참고 URL>
http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx
Posted by 알 수 없는 사용자
:
2010. 8. 24. 15:03
안녕하세요. 엉스데브 입니다.

이번에 새로 WIndows 2008 R2 서버를 하나 설치 했습니다. 웹 사이트를 하나 운영 하려구요.
제가 요새 PowerShell 을 공부하는 중이라서 이번 웹서버 구축은 PowerShell 을 통해서 모든 것을 진행 해 보려고 합니다.

먼저 PowerShell 을 켜 볼까요?
Windows 2008 R2 서버는 관리자로 로그인시 작업표시줄에 PowerShell 아이콘이 기본적으로 있으며,
Windows 7 과는 다르게 아이콘을 오른쪽 클릭하고 "관리자 권한으로 실행" 메뉴를 클릭해서 실행 하지 않아도
자동으로 관리자 권한으로 실행 됩니다. 아무래도 서버 제품이다 보니 작업의 특성을 잘 살린 배려인것 같습니다. 편하네요~



Windows 2008 R2 는 기본적으로 "ServerManager" 라는 모듈을 제공합니다.
이 모듈은 역할, 역할 서비스 및 기능 등을 추가/삭제 할 수 있는 기능을 제공하며, 이를 통해 IIS 를 설치 할 수 있습니다.

어디 정말 "ServerManager" 모듈이 존재하는지 확인 해 볼까요?


네. 역시 존재하네요.

그럼 모듈을 한번 불러들여 보겠습니다. 모듈에서 어떤 cmdlet 을 제공하는지도 확인 해 볼까요?


이야.. 심플합니다. cmdlet 3개가 추가 된 커맨드의 전부네요.
게다가 모두 WindowsFeature 에 대한 내용들이고, Add / Get / Remove 등 직관적으로 무엇을 할 수 있는지가 파악 됩니다.
네.. WindowsFeature 들을 추가하고 목록을 가져오고 삭제도 할 수 있겠네요.

더 정확한 내용을 보려면 Get-Help 명령을 이용하면 됩니다. 도움말이 한글화 되어 있어 상당히 편하네요.


일단 어떤 WindowsFeature 들이 있는지 한번 살펴보겠습니다.


엄청 많이 표시 됩니다. 하부 항목들은 트리구조를 흉내내어 들여쓰기 되어 표시되는군요.
아마도 GUI 로 된 서버 관리자에서 관리 할 수 있는 모든 역할, 역할서비스 및 기능 들을 다 표시 해 주는 것 같습니다.
오른 쪽에는 해당 WindowsFeature 의 정식 이름이 표시 되네요.

너무 많으므로, 웹서버(IIS) 와 관련 된 항목만을 추려서 다시 봐야 겠습니다.
모든 웹서버(IIS) 관련 항목은 이름이 "Web-" 로 시작 합니다. 아래와 같이 입력하면 관련 내용만 표시 됩니다.


웹서버(IIS) 가 보입니다. 이 Feature 의 정확한 이름은 Web-Server 네요.

일단 무조건 설치 해 봤습니다. 약간의 시간이 지나 결과가 표시 되네요.


성공 여부, 재시작이 필요한지 여부, 종료 코드, 그리고 설치 된 항목의 리스트가 표시 되네요.
웹서버(IIS)에 포함된 모든 항목이 설치되는 것은 아니고, 꼭 필요한 필수 Feature 들만 골라서 설치 되네요.
(어떤게 설치 되었는지는 다시한번 Get-WindowsFeature -Name "Web-*" 명령어를 날려서 확인 해 보면 됩니다)

테스트로 설치 해 본 것인만큼 일단 지워 보겠습니다.


아, 지워지긴 했는데 재부팅을 해야지만 정상적으로 제거가 된다고 하는군요. 재시작 해 줍니다.


재부팅이 완료 되었습니다. 이제 실제 서비스에 사용할 웹서버를 다시 설치 해 볼겁니다.
전 서버 용량도 충분하고 혹시나 나중에 기능을 추가할 경우에 번거로운 일들이 생길까봐, 전체 기능을 다 설치 하기로 했습니다.
아래와 같이 입력하면 됩니다.


자, 그럼 잘 설치 되어 있는지 확인 해 볼까요??


모두 잘 설치가 되었습니다!(X 표시가 설치가 되었다는 표시입니다.)

PowerShell 로 IIS 설치하기 참 쉬운 것 같습니다. ^^


<참고 URL>
http://blogs.msdn.com/b/powershell/archive/2009/01/27/managing-server-features-with-powershell-cmdlets-on-windows-2008-server-r2-beta.aspx
Posted by 알 수 없는 사용자
:
2010. 8. 18. 17:58
안녕하세요. 엉스데브 입니다.

리눅스 시스템을 관리 할 때 편하게 사용했던 명령 중에 findgrep 명령이 있었습니다.
여러개의 폴더 및 하위 폴더의 파일을 대상으로 찾고자 하는 문자열을 포함한 파일을 찾아주는 기능을 하는 명령 입니다.
PowerShell 에서도 이 명령을 사용하고 싶어져서, 만들어 보았습니다.

function Search-FileByContentString
{
  param
  (
    [String]$SearchString,
    [String]$TargetDirectory,
    [String]$IncludeExtension = 'txt;asp;aspx;config;xml',
    [Int32]$SkipFileSize = 5MB
  )
 
 $directory = Get-ChildItem($TargetDirectory) -ErrorAction SilentlyContinue

  if($directory -eq $null)
  {
    return $null
  }

  foreach($item in $directory)
  {
    switch($item.GetType().ToString())
    {
      # 파일 일때
      'System.IO.FileInfo'
      {
        if (!($IncludeExtension.Split(';') -eq $item.Extension.Replace('.','')))
        {
          break
        }

        if($item.Length -gt $SkipFileSize)
        {
          break
        }
       
        $Lines = @(Get-Content($item.FullName))

        for($index = 0; $index -lt $Lines.Count; $index++)
        {
          if( $Lines[$index].Contains($SearchString))
          {
            Write-Host $item.FullName"("($index + 1)"): "$Lines[$index]
          }
        }

        break
      }

      # 디렉토리 일때
      'System.IO.DirectoryInfo'
      {
        Search-FilebyContentString -SearchString $SearchString -TargetDirectory $item.FullName -IncludeExtension $IncludeExtension -ExcludeExtension $ExcludeExtension -SkipFileSize $SkipFileSize
        break
      }

      # 다른 종류 일때
      default
      {
        Write-Host "Error:(" + $item.GetType().ToString() + ")"
        break
      }
    }
  }
}

실행 결과:



<참고 URL>
http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/05/09/powershell-dyi-commands-using-functions.aspx
Posted by 알 수 없는 사용자
:

BLOG main image
Windows Server를 공부 하는 사람들의 팀블로그 by 마성민

카테고리

분류 전체보기 (76)
Windows (2)
Powershell (56)
AD (0)
Exchange (6)
System Center (9)
IIS (0)
SQL (3)
Sharepoint (0)

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

Total :
Today : Yesterday :