2014. 9. 24. 16:03

  • Powershell script는 VB script와는 달리 명령 프롬프트의 명령어를 모두 이용할 수 있는 장점이 있다. 이것의 위대함은 경험할 수록 감동을 받게 된다. 특히 원격 관리 기능 및 Active Directory의 Group Policy와 함께 사용할 때 더욱 빛을 발하게 된다.
  • 즉, 회사의 모든 컴퓨터를 도메인에 가입하고 Active Directory에서 Group Policy를 사용하여 enable-psremoting -force를 스크립트로 만들어 도메인 구성원 컴퓨터에 적용을 하면 Group Policy를 통하여 .ps1 스크립트를 적용할 수 있으며, 또한 중앙에서 Invoke-Command를 사용하여 원격 컴퓨터를 스크립트로 제어를 할 수 있다.
  • 물론 모든 클라이언트에서 script ExecutionPolicy가 RemoteSigned나 AllSigned 또는 UnRestricted로 설정하도록 AD의 그룹 정책에서 설정을 해두어야 한다.
  • 명령 프롬프트에서 사용하는 명령어를 한 번 정리해보면 다음과 같다.
    • Netsh interface ipv4 set dns “Local Area Connection” 192.168.123.200 primary
    • Route delete 0.0.0.0
    • Route -P add 192.168.123.0 mask 255.255.255.0 192.168.123.250 
    • Net users administrator /active:no
출처 : http://cloudsns.wordpress.com/category/microsoft/powershell/page/9/

Posted by pegasuss
2014. 9. 24. 16:00

  • Powershell에서는 확장자 ps1을 갖는 스크립트 파일을 기본적으로 실행하지 못하도록 되어 있다. 그것은 바로 ExecutionPolicy가 Restricted로 되어 있기 때문이다.
  • 그렇다면 ExecutionPolicy의 종류들이 어떤 것들이 있는지 확인하기 위해서 Help Set-ExecutionPolicy를 해보면 매개변수 ExecutionPolicy가 있음을 알 수 있다.
  • 그래서 Help Set-ExecutionPolicy -Parameter ExecutionPolicy를 해보면 다음과 같이 나타난다.


  • 여기서 우리가 일반적으로 많이 설정하는 RemoteSigned가 의미하는 것이 무엇일까? 그것은 바로Sample.ps1 파일이 로컬 컴퓨터에 있지 않고 원격 파일 서버에 있을 때 sample.ps1은 반드시 디지털 서명이 되어 있어야 한다는 것이다.
    • 로컬 컴퓨터의 ExecutionPolicy가 Restricted로 설정되어 있는 경우, 
      Powershell.exe -ExecutionPolicy RemoteSigned -File\\FileServer\SharedFolder\sample.ps1 을 실행하려고 한다. 이 때 잠시 Restricted에서 RemoteSigned로 변경되기 때문에 원격 컴퓨터에 있는 sample.ps1 스크립트 파일은 반드시 디지털 서명이 되어 있어야만 실행이 된다는 것이다.
    • 로컬 컴퓨터의 ExecutionPolicy가 RemoteSigned로 되어 있는 경우, 
      원격 컴퓨터의 스크립트 파일을 다음과 같이 실행하려고 할 때 이 스크립트 파일이 디지털 서명이 되어 있어야 한다는 것이다. 

      \\FileServer\SharedFolder\sample.ps1


       


       
       

    • 아래 그림은 로컬 컴퓨터 이름이 DC이고 원격 컴퓨터 이름은 Server1이다. DC는 RemoteSigned이고 Server1은 Restricted이다. 로컬 컴퓨터의 ps1 파일을 실행하여 원격 컴퓨터의 notepad 실행 여부를 확인할 때는 제대로 나왔다. 그 이유는 로컬 컴퓨터가 RemoteSigned로 되어 있어서 로컬 컴퓨터의 ps1 파일은 디지털 서명이 되어 있지 않아도 실행되기 때문이다.
      그런데 원격 컴퓨터의 ps1 파일을 이용하여 원격 컴퓨터의 notepad 실행 여부를 확인하니 오류가 발생했다. 그 이유는 원격 컴퓨터가 Restricted로 되어 있기 때문에 { }안에 있는 내용인 ps1 파일이 실행되지 않은 것이다. 여기서 Invoke-Command의 { }안에 있는 cmdlet 또는 script는 원격 컴퓨터에서 실행된다는 것을 꼭 알아야 한다.
       


      출처 : http://cloudsns.wordpress.com/category/microsoft/powershell/page/10/

Posted by pegasuss
2014. 9. 22. 10:32

  • 수 백대의 PC를 도메인에 가입시키는 것은 시간이 많이 걸린다. 이것을 해결하는 것이 확장자 .bat 파일을 이용하여 그 파일을 더블클릭하여 설치하면 된다.
  • 중요한 것은 그 배치 파일안에 어떤 내용은 넣느냐는 것이다. 그 파일에는 Powershell script를 실행하는 내용을 넣으면 된다. 그런데 Script는 어떻게 만들어야지 알아야 한다. 다음과 같이 순서대로 작업을 하면 된다.
    • 먼저 도메인에 가입하게 하는 Powershell script를 작성해야 한다. 이 스크립트의 내용은 도메인에 가입하고 컴퓨터를 재시작하도록 하는 것이다.
      Add-Computer -DomainName Powershell -Credential Powershell\administrator ; Restart-Computer

      (참고로 도메인에서 제거하려면 Remove-Computer ; Restart-Computer)

    • 이 내용을 C:\JoiningDomain.ps1 파일로 저장한다.
      (참고로 이 배치파일을 PC에 실행하면 ExecutionPolicy 때문에 실행이 되지 않는다. 그래서 배치 파일을 이용하는 것이다.)
    • 이제는 이 스크립트를 실행하는 배치 파일(TakingPartInDomain.bat)을 생성한다.
      Powershell.exe -ExecutionPolicy UnRestricted -File c:\joiningDomain.ps1
      (이렇게 하여 더블 클릭으로 이 파일을 실행하면 이 작업을 할 동안 만 ExecutionPolicy가 Unrestricted로 된 후 .ps1 파일을 실행한다. 그리고 다시 원래 모드인 Restricted로 돌아간다.)
    • 여기서 도메인에 가입시키는 사용자는 이 배치 파일을 USB 플래시 메모리에 저장하여 가지고 다니면서 이 배치 파일을 더블클릭하여 실행하면 도메인에 가입할 수 있다. 문제는 USB 드라이브가 어떤 볼륨인지 알 수가 없다. 그래서 Powershell.exe -ExecutionPolicy UnRestricted -File c:\joiningDomain.ps1에서 -File \\fileserver\JoiningDomain.ps1으로 바꿔서 실행하면 된다. 즉, ps1 파일을 File Server에 저장해 놓고 사용하면 된다는 것이다.
출처 : http://cloudsns.wordpress.com/category/microsoft/powershell/page/10/

Posted by pegasuss
2014. 9. 22. 10:24

  • Active Directory의 사용자 계정의 상태를 모니터링하는 것은 관리자가 해야 할 일이다. 그 중에서 사용자 계정의 AccountDisabled, LockedOut, AccountExpired, AccountInactive 등을 확인하는 것은 매우 중요한 일이다. 이 때 사용하는 cmdlet가 Search-ADAccount이다.

  • 다음 내용을 보면서 사용자의 상태를 모니터링을 해 본다.
    • 사용자 계정 중에서 Disabled 된 것만 확인하기
      Search-ADAccount -AccountDisabled
      Search-ADAccount -AccountDisabled | FT name, objectclass -Autosize 

    • Disabled account를 모두 Enable하기
      Search-ADAccount -AccountDisabled | Enable-ADAccount
    • 사용자 계정이 잠겨 있는 것만 확인하기
      Search-ADAccount -LockedOut
    • 잠긴 계정을 모두 풀어주기
      Search-ADAccount -LockedOut | Unlock-ADAccount
    • 5일 동안 로그온 안 한 사용자 찾기 (여기에 나타난 사용자중에서 출근을 하고 있었다면 그동안 다른 사람 계정으로 일한 것이다)
      Search-ADAccount -AccountInactive -TimeSpan 5.00:00:00
    • 사용자 계정의 기간이 만료된 것만 찾기
      Search-ADAccount -AccountExpired | FT name, objectclass -A
    • 암호 만료 기간을 설정하지 않은 계정(예를 들면, 이사, 사장님 계정, 서비스 계정)
      Search-ADAccount -PasswordNeverExpires
    • 특정한 부서의 사용자 계정만을 Disable시키기
      Get-ADUser -Filter * -Searchbase “OU=Sales, DC=Powershell, DC=Kr” | Disable-ADAccount
출처 : http://cloudsns.wordpress.com/category/microsoft/powershell/page/10/

Posted by pegasuss
2014. 9. 22. 10:21

  • 사용자 계정의 암호를 변경하는 방법은 2가지다. 하나는 사용자가 직접 현재 암호를 입력하고 다시 변경하고자 하는 암호를 두 번 입력하면 새로운 암호로 변경된다. 두 번째는 관리자가 사용자의 암호를 재설정하면 된다. 재설정(reset)을 한다는 것은 기존 암호를 몰라도 되며, 또한 사용자가 자기 암호를 잊어버렸을 때 관리자가 대신 해주는 것이다.
  • 일반적으로 많이 사용한 방법은 명령 프롬프트에서 net users user1 * 으로 작업하면 되며, 혹시 Domain 사용자 계정일 때는 net users aduser1 * /domain으로 하면 된다. 이것이 가장 간편한 방법이다. 하지만 이것도 불편한 점이 있다. 그것은 바로 여러 사용자 계정의 암호를 한꺼번에 재설정은 할 수 없다는 것이다. 이를 위해서 Powershell을 이용하면 된다.
  • 다음과 같이 하여 Lab OU에 있는 100명의 사용자 계정의 암호를 재설정(reset)을 할 수 있다.
    • Get-ADUser -Filter * -Searchbase “OU=Lab, DC=Powershell, DC=Local” | Set-ADAccountPassword -Reset -NewPassword (Read-Host -AsSecureString -Prompt “새로운 암호를 입력하세요.”)
      이렇게 하면 화면에 새로운 암호를 입력하라고 하며, 이 때 관리자가 생각하고 있는 암호를 입력하면 암호화되어 저장된다.
      여기서 주의할 사항은 여러 명에 대한 암호를 한꺼번에 변경할 때는 -Reset -NewPassword (Read-Host -AsSecureString…)을 꼭 같이 사용해야 한다는 것이다. 만약 -Reset만 사용한다면 여러 사용자에 대하여 일일이 암호를 입력해야 하는 불편함이 따르기 때문이다. 한 명에 대한 암호 재설정일 때는 상관없다.
  • 이제는 한 명의 사용자 계정에 대한 암호를 변경해 보자.
    • Get-ADUser -Identity jesuswithme (jesuswithme 계정이 있는지 확인하기)
    • Get-ADUser -Identity jesuswithme | Set-ADAccountPassword -Reset
      이렇게 한 후 암호를 입력하면 된다. 그러면 새로운 암호가 적용된다.
    • Get-ADUser -Identity jesuswithme | Set-ADAccountPassword -Reset -NewPassword (Read-Host -AsSecureString -Prompt “새로운 암호를 입력하세요”)
      이렇게 한 후 원하는 암호를 사용하면 된다. 여기서 -Prompt 매개변수는 옵션이기 때문에 필요할 경우만 사용하면 된다.
    • -Reset만 사용하면 암호 설정이 Plain text로 입력되고, 암호화가 되어 재설정되도록 하려면 반드시 -Reset -NewPassword (Read-Host -AsSecureString) 형식으로 입력해야 한다는 사실이다.
출처 : http://cloudsns.wordpress.com/category/microsoft/powershell/page/10/

Posted by pegasuss