네트워크 어댑터(NIC)에 대한 정보 확인하기(Get-WmiObject 이용)


  • NIC의 정보를 쉽게 확인하는 방법은 다음과 같다.
    Get-WmiObject -Class Win32_*network* -List


  • 여기서 IP 구성 정보를 확인하는 Win32_NetworkAdapterConfiguration을 이용하면 편리하다
    Get-WmiObject -Class Win32_NetworkAdapterConfiguration
    Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Format-List *

    (여기서 IPEnabled가 True인 것을 참고한다.)
    Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where {$_.IPEnabled -eq ‘True’}
    (이렇게 하면 로컬 컴퓨터 IP 구성 상황을 모두 알 수 있다.)


    Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName Server1 | Where {$_.IPEnabled -eq ‘True’}
    (이렇게 하면 원격 컴퓨터 IP 구성 상황을 모두 알 수 있다.)
     

  • 네트워크 어댑터 종류들을 확인해보자.
    Get-WmiObject -Class Win32_NetworkAdapter
    Get-WmiObject -Class Win32_NetworkAdapter | FT name



    Get-WmiObject -Class Win32_NetworkAdapter
    -ComputerName Server1 | FT name
     

3-디스크에 대한 정보 확인하기(Get-WmiObject 사용하기)


  • 컬 컴퓨터 및 원격 컴퓨터의 디스크와 관련된 정보를 확인하기 위해서는 Get-WmiObject를 이용하면 된다.
  • 먼저 disk와 관련된 Get-WmiObject를 확인하기 위해서 다음과 같이 하면 사용 가능한 목록을 확인할 수 있다.
    Get-WmiObject -Class Win32_*Disk* -List


  • 이제 각각의 정보를 한 번 살펴보자.
    Get-WmiObject -Class Win32_LogicalDisk
    Get-WmiObject -Class Win32_LogicalDisk -ComputerName Server1
    (원격지에 위치한 컴퓨터의 디스크 정보도 알 수 있다.)

    Get-WmiObject -Class Win32_MappedLogicalDisk
    Get-WmiObject -Class Win32_MappedLogicalDisk -ComputerName Server1
    (원격 컴퓨터가 어느 fileserver에 연결되어 있는지 알 수 있다.)
    Get-WmiObject -Class Win32_MappedLogicalDisk -ComputerName Server1 | ft name, providername, freespace -autosize
    (이렇게 하면 원격 컴퓨터 Server1이 어느 File server에 어떤 드라이브로 연결되어 있는지 간략하게 알 수 있다.)

    Get-WmiObject -Class Win32_DiskPartition
    Get-WmiObject -Class Win32_DiskPartition -ComputerName Server1

    Get-WmiObject -Class Win32_DiskDrive
    Get-WmiObject -Class Win32_DiskPartition -ComputerName Server1

    Get-WmiObject -Class Win32_DiskQuota
    Get-WmiObject -Class Win32_DiskQuota -ComputerName Server1
    (각 사용자 단위로 디스크 할당량 정도를 확인할 수 있다. 원격 컴퓨터도 마찬가지.)
     

Disk Controller에 오류가 있는지 확인하기


  • 로컬 컴퓨터의 Disk Controller에 문제가 있는지 확인하여 본다.
    • Get-EventLog -LogName System -InstanceId 3221487627 -ErrorAction 0
    • Get-EventLog -LogName System -InstanceId 3221487627 -ErrorAction 0 | ForEach-Object {$_.ReplacementStrings[0] } | Group-Object -NoElement | Sort-Object Count -Descending


  • 이렇게 하여 나온 것 중에 대부분은 USB drive를 강제로 빼서 생기는 것이 많다.

1-내 시스템에서 사용한 USB Storage 종류 알아보기


  • 다음과 같이 실행하면 로컬 컴퓨터에서 사용한 USB 스토리지 정보를 Registry에 추출하여 확인할 수 있다.

    $key = ‘Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\*\*’
    Get-ItemProperty $key | Select-Object -ExpandProperty FriendlyName | Sort-Object

  • 이것을 한 줄로 해결할 수 있다.(semicolon 사용)
    $key = ‘Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\*\*’ ;
    Get-ItemProperty $key | Select-Object -ExpandProperty FriendlyName | Sort-Object

  • 이것을 스크립트로 만들어 사용하여 원격 컴퓨터에서 사용한 USB 종류를 알 수도 있다. 즉, PickupUSBtype.ps1 파일로 만들어서 다음과 같이 하면 원격 컴퓨터에서 사용한 USB 종류들을 확인할 수 있다.
    Invoke-Command -FilePath c:\myscripts\PickupUSBtype.ps1 -ComputerName pc1, pc2, pc3

Powershell script에서 Param 사용하여 컴퓨터 정보 확인하기


  • Powershell Script를 실행할 때마다 다른 컴퓨터 이름을 사용하고자 할 때 스크립트에 Param을 사용하면 유용하다
  • 만약에 컴퓨터의 OS 정보를 확인하고자 할 때는 다음과 같이 할 수 있다.
    Gwmi Win32_OperatingSystem | Select-Object BuildNumber, Caption, ServicePackMajorVersion

    Gwmi Win32_OperatingSystem -ComputerName server2 | Select-Object BuildNumber, Caption, ServicePackMajorVersion


  • 그런데 여기서 로컬 컴퓨터가 아닌 원격 컴퓨터의 정보를 알아 내기 위해서는 이렇게 긴 것을 다 쓰고 컴퓨터 이름만 바꿔서 써야 한다. 너무 힘들다. 그래서 스크립트를 만드는 것이다
  • 스크립트를 만들어서 저장할 때 .ps1 파일(pcname2.ps1)로 저장한다. 그런데 이 내용을 저장하면 하나의 컴퓨터 정보만 얻을 수 밖에 없다. 그래서 원격에 있는 컴퓨터의 정보를 얻기 위해서 Param ( )을 사용한다.
     



    여기서 $PC는 매개변수(Parameter)이다. 그러므로 스크립트 파일을 생성할 때 Param ( )을 사용한다는 것은 바로 해당 스크립트에 parameter를 사용하겠다는 것이고, 그 결과 다양하게 응용하겠다는 뜻이다.
     

  • 여기서 localhost라고 한 것은 어떤 컴퓨터에서 이 스크립트를 실행을 하든 컴퓨터 이름을 입력하지 않을 때 기본적으로(by default) 자신의 컴퓨터라는 것을 말하는 것이다.
    C:\MyScripts\pcname2.ps1
  • 이제는 이 스크립트 파일을 실행할 때 반드시 컴퓨터 이름을 입력하도록 해보자.
    C:\MyScripts\pcname2.ps1 server1
    (여기서 parameter를 사용하지 않더라도 제일 먼저 사용한 매개변수는 pc 이므로, pc 매개변수에 대한 값으로 server1을 인식한 것이다.)
    C:\MyScripts\pcname2.ps1
    -PC
    server1
    (Param에서 사용한 $pc는 parameter 이름이다. 그래서 여기서 -PC로 입력한 후 server1을 입력한 것이다.)
    C:\MyScripts\pcname2.ps1 -P
    server1
    (Param에서 사용한 parameter 중에서 p로 시작하는 것은 pc 밖에 없기 때문에 이렇게 해도 된다)
     

  • 즉, 이렇게 해야지 원하는 컴퓨터의 정보를 정확하게 얻을 수 있다. 이렇게 하려면 사용자에게 이 스크립트를 실행하는 방법을 알려주어야 하는 번거로움이 있다. 이것을 해결하는 것이 다음과 같이 Read-Host를 이용하는 것이다. 이렇게 하면 해당 스크립트를 실행하여 자동으로 화면(screen, host)에 창이 Popup되기 때문에 사용자가 원하는 컴퓨터 이름을 입력하게 되는 것이다.
     


     
     


Write-Host와 Write-Output의 차이점


  • 어떤 결과를 화면(Screen, Host)에 보여 주고자 할 때 Write-Host 및 Write-Output을 사용한다.
  • 결과를 화면에 보여 줄 때 가장 기본적으로 사용하는 것이 Write-Host이다. Write-Host는 콘솔 화면에 결과를 보여주면서 색깔 및 구분자 등을 이용하여 다양하게 지정할 수 있는 장점이 있다. 하지만 화면에 나타나는 결과를 Pipleline이 입력 값으로 사용할 수 없다. 그래서 활용도가 좀 떨어진다.
    Help Write-Host -full

    Write-Host “사랑합니다.”
    Write-Host “사랑합니다.” -ForegroundColor white -BackgroundColor black


    Write-Host “사랑”,”희락”,”화평”
    Write-Host “사랑”,”희락”,”화평” -Separator “->”
    Write-Host “사랑”,”희락”,”화평” -Separator “, “
    Write-Host “사랑”,”희락”,”화평” -Separator “, ” -fore red
     

  • Write-Output은 화면에 나타나는 결과를 Pipleline의 입력 값으로 보낼 수 있어서 활용도가 좋은 편이다. 하지만 화면에 표현할 때 색깔 등을 입혀서 화려하게 보여줄 수는 없다.
    Write-output “사랑합니다”,”희락”,”화평” | where {$_.length -gt 3}
    Write-output “사랑합니다”,”희락”,”화평” | Sort-Object -Descending
    Write-output “사랑합니다”,”희락”,”화평” | Export-Csv yslee.csv