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. 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. 16:04

이번엔 파워쉘을 이용하여 익스플로러를 호출하고 특정도메인에 dom객체를 사용하는 방법을 살펴보겠습니다. 





익스플로러가 실행되고 특정도메인이 호출되자마자 원하는 오브젝트가 로딩되기전 사용을 시도하는 경우가 있으므로 navigateToApp 메소드를 통해 로딩이 완료된것을 체크하고 특정작업을 진행합니다.

위에서 살펴보신것처럼 파워쉘을 이용해 dom객체를 쉽게 접근하고 이용이 가능합니다.
파워쉘을 이용한 크롤러를 만들어 보는건 어떨까요~~

원본: http://vstarmanv.tistory.com/entry/파워쉘을-이용한-DOM-사용

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

.NET Assembly load  (0) 2010.09.15
[MSSQL]WMI for SQL Management(1)  (0) 2010.09.15
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
파워쉘 버전  (0) 2010.09.09
PowerShell Profile Configuration  (2) 2010.09.09
Posted by 알 수 없는 사용자
:
2010. 9. 9. 15:59

파워쉘로 간단한 부팅매크로를 만들수 있습니다. 이럴때 유용한 cmdlet이 바로 Invoke-Item 입니다.
간단히 아래와 같이..

#file booting-macro.ps1
Set-ExecutionPolicy remotesigned

write-host "Exec Visual Studio 2010"
Invoke-Item 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe'


write-host "Exec Visual Studio 2008"
Invoke-Item 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe'


write-host "Exec Putty"
Invoke-Item 'C:\Program Files (x86)\PuTTY'


write-host "Exec Outlook"
Invoke-Item 'C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE'


write-host "Exec notepad++"
Invoke-Item 'C:\Program Files (x86)\Notepad++\notepad++.exe'
#end script


위의 내용으로 booting-macro.ps1 를 만들고 작업스케줄러에 적당히 등록하면 간단한 부팅 매크로가 완성됩니다.


원본:  http://vstarmanv.tistory.com/entry/Invoke-Item

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

[MSSQL]WMI for SQL Management(1)  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 버전  (0) 2010.09.09
PowerShell Profile Configuration  (2) 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 알 수 없는 사용자
:
2010. 8. 18. 17:02
안녕하세요. 엉스데브 입니다.

PowerShell 을 사용해 FTP 사이트를 만들다 보니, FTP 로그인 정보로 사용할 사용자 계정추가가 필요 해 졌습니다.
해서 간단하게 로컬 컴퓨터의 사용자를 추가 및 삭제 할 수 있는 함수를 만들어 보았습니다.

*아래 함수들은 반드시 PowerShell 이 관리자 권한으로 실행 되었을 때에만 권한 문제 없이 실행 됩니다.

# 새 로컬 사용자 추가.
function New-LocalUser
{
  param
  (
    [parameter(Mandatory=$true)]$Name,
    [parameter(Mandatory=$true)]$Password
  )

  $LocalUser = Get-WmiObject Win32_useraccount -Computer $env:computerName -Filter "LocalAccount=True" | Where-Object -Filter {$_.Name -eq $Name}

  if($LocalUser -eq $null)
  {
    $LocalComputer = [adsi]"WinNT://$env:computerName"
    $LocalUser = $LocalComputer.Create("User", $Name)
    $LocalUser.SetPassword($Password)
    $LocalUser.SetInfo()
  }
}

# 로컬 사용자 삭제.
function Remove-LocalUser
{
  param
  (
    [parameter(Mandatory=$true)]$Name   
  )

  $LocalComputer = [adsi]"WinNT://$env:computerName"

  $LocalComputer.Delete("user",$Name) 
}

# 로컬 사용자 목록 가져오기.
function Get-LocalUser
{
  param
  (
    $Name
  )

  if($Name -eq $null)
  {
    Get-WmiObject Win32_useraccount -Computer $env:computerName -Filter "LocalAccount=True"
  }
  else
  {
    Get-WmiObject Win32_useraccount -Computer $env:computerName -Filter "LocalAccount=True" | Where-Object -Filter {$_.Name -eq $Name}
  } 
}

아래 더보기 버튼을 누르시면, 간단한 해설을 보실 수 있습니다.


<참고 URL>
http://stackoverflow.com/questions/383390/create-local-user-with-powershell-windows-vista
http://powershell.com/cs/media/p/2327.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 :