-
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
Month: July 2012
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 Server1Get-WmiObject -Class Win32_DiskDrive
Get-WmiObject -Class Win32_DiskPartition -ComputerName Server1Get-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
- Get-EventLog -LogName System -InstanceId 3221487627 -ErrorAction 0
- 이렇게 하여 나온 것 중에 대부분은 USB drive를 강제로 빼서 생기는 것이 많다.
Powershell Remoting에 대한 공짜 책 다운받는 곳
Windows PowerShell 3.0 and Server Manager Quick Reference Guides
Powershell Magazine 웹싸이트
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
Windows PowerShell 3.0을 사용한 고급 자동화
Powershell script에서 Param 사용하여 컴퓨터 정보 확인하기
- Powershell Script를 실행할 때마다 다른 컴퓨터 이름을 사용하고자 할 때 스크립트에 Param을 사용하면 유용하다
-
만약에 컴퓨터의 OS 정보를 확인하고자 할 때는 다음과 같이 할 수 있다.
Gwmi Win32_OperatingSystem | Select-Object BuildNumber, Caption, ServicePackMajorVersionGwmi 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 -fullWrite-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