본문 바로가기

윈도우PC 보안 컴플라이언스 필수 및 위반 서비스 실행상태 모니터링

윈도우에서 특정 서비스가 실행 중인지 확인하려면 명령 프롬프트나 PowerShell을 사용할 수 있습니다. 다음은 명령 프롬프트에서 사용할 수 있는 명령어입니다.

  1. 명령 프롬프트에서 서비스 상태 확인하기
    • sc query [서비스 이름] 명령어를 사용하여 특정 서비스의 상태를 확인할 수 있습니다. 이 명령어는 서비스가 실행 중인지, 중지되었는지 또는 다른 상태인지를 보여줍니다. [서비스 이름] 부분에는 확인하고자 하는 서비스의 정확한 이름을 입력해야 합니다. 예를 들어, "Spooler" 서비스(프린터 스풀러 서비스)의 상태를 확인하려면 다음 명령어를 사용합니다.
      sc query Spooler
  2. PowerShell에서 서비스 상태 확인하기
    • PowerShell을 사용하는 경우, Get-Service 명령어를 사용하여 서비스의 상태를 확인할 수 있습니다. 이 명령어도 서비스의 실행 상태를 포함한 다양한 정보를 제공합니다. 예를 들어, "Spooler" 서비스의 상태를 확인하려면 다음과 같은 명령어를 입력합니다.
      Get-Service -Name Spooler

이 명령어들을 사용하여 윈도우 시스템에서 서비스의 상태를 쉽게 확인할 수 있습니다. 서비스 이름을 모를 경우 sc queryGet-Service 명령어만 입력하여 모든 서비스의 목록과 상태를 볼 수 있습니다.

How to Manage Windows Services with PowerShell?

윈도우에서 현재 실행 중인 전체 서비스 목록을 확인하는 방법은 명령 프롬프트와 PowerShell을 사용하는 두 가지가 있습니다.

1. 명령 프롬프트 사용법

명령 프롬프트에서는 sc query 명령어를 사용하여 실행 중인 서비스만 필터링할 수 있습니다. 다음과 같이 명령어를 입력하세요.

sc query | find "RUNNING"

이 명령어는 현재 실행 중인 모든 서비스를 나열합니다. 출력 결과에서 SERVICE_NAMEDISPLAY_NAME을 통해 각 서비스의 이름과 설명을 확인할 수 있습니다.

2. PowerShell 사용법

PowerShell에서는 Get-Service 명령어를 사용하여 실행 중인 서비스를 쉽게 확인할 수 있습니다. 다음과 같이 명령어를 입력하세요:

Get-Service | Where-Object {$_.Status -eq 'Running'}

이 명령어는 서비스의 상태가 'Running'인 모든 서비스를 필터링하여 보여줍니다. 서비스의 이름, 상태, 서비스 유형 등 추가 정보도 함께 출력됩니다. 이러한 명령어들을 사용하면 시스템에서 현재 활성화되어 운영 중인 서비스의 전체 목록을 확인할 수 있습니다.

 

윈도우에서 실행 중인 서비스 목록을 한 줄로 출력하고, 각 서비스가 실행 중인 프로세스(실행 파일명)를 표시하려면 PowerShell을 사용하는 것이 가장 적합합니다. 명령 프롬프트보다 PowerShell이 이러한 요구 사항을 처리하는 데 더 유연하고 효과적입니다.

 

다음은 PowerShell을 사용하여 실행 중인 서비스와 그에 해당하는 실행 파일명을 함께 표시하는 방법입니다.

  1. PowerShell을 엽니다.
  2. 다음 명령어를 입력합니다.
    Get-Service | Where-Object {$_.Status -eq 'Running'} | ForEach-Object { $svc = $_; Get-WmiObject Win32_Service | Where-Object {$_.Name -eq $svc.Name} | ForEach-Object { "$($svc.Name) - $($svc.DisplayName) - 실행 파일: $($_.PathName)" } }

이 명령어는 실행 중인 모든 서비스를 가져와 (Get-Service | Where-Object {$_.Status -eq 'Running'}), 각 서비스에 대해 WMI 객체를 조회하여 (Get-WmiObject Win32_Service), 서비스 이름이 일치하는 항목에서 서비스 이름, 표시 이름, 실행 파일 경로를 포함한 문자열을 생성합니다.

  • Get-Service는 모든 서비스의 목록을 가져옵니다.
  • Where-Object {$_.Status -eq 'Running'}는 이 중에서 실행 중인 서비스만을 필터링합니다.
  • Get-WmiObject Win32_Service는 서비스에 대한 더 자세한 정보, 특히 실행 파일 경로를 가져오기 위해 사용됩니다.
  • 마지막으로 ForEach-Object는 각 서비스에 대해 형식화된 출력 문자열을 생성합니다.

이 명령은 각 실행 중인 서비스의 이름, 표시 이름, 그리고 해당 서비스를 실행하는 실행 파일 경로를 한 줄씩 출력합니다.

 

윈도우에서 실행 중인 서비스 목록을 파일로 기록하고, 이 목록이 변경될 때마다 웹훅을 통해 알림을 보내는 작업을 설정하는 것은 몇 단계로 진행할 수 있습니다. 여기서는 PowerShell 스크립트를 사용하여 서비스 목록을 기록하고, 변화를 감지하며, 웹훅을 통해 알림을 보내는 방법을 설명하겠습니다.

1. PowerShell 스크립트 작성

우선 실행 중인 서비스 목록을 파일로 기록하고, 변화가 감지될 때 웹훅으로 알림을 보내는 PowerShell 스크립트를 작성합니다.

$previousPath = "C:\ServiceLogs\previous_services.txt"
$currentPath = "C:\ServiceLogs\current_services.txt"

# 현재 실행 중인 서비스 목록을 파일로 저장
Get-Service | Where-Object {$_.Status -eq 'Running'} | Select-Object Name, DisplayName, Status | Export-Csv -Path $currentPath -NoTypeInformation

# 이전 파일이 존재하는지 확인
if (Test-Path $previousPath) {
    # 이전 상태와 현재 상태 비교
    $currentServices = Import-Csv $currentPath
    $previousServices = Import-Csv $previousPath
    $difference = Compare-Object -ReferenceObject $previousServices -DifferenceObject $currentServices -Property Name, DisplayName, Status

    # 변화가 있는 경우 웹훅을 통해 알림
    if ($difference) {
        $webhookUrl = "YOUR_WEBHOOK_URL"
        foreach ($change in $difference) {
            $postData = @{text = "Service change detected: $($change.Name) - $($change.DisplayName) - $($change.Status)"}
            Invoke-RestMethod -Uri $webhookUrl -Method Post -Body ($postData | ConvertTo-Json) -ContentType 'application/json'
        }
    }
}

# 현재 목록을 이전 목록으로 이동
Move-Item -Path $currentPath -Destination $previousPath -Force

2. 스크립트 자동화

이 스크립트를 정기적으로 실행하기 위해 Task Scheduler를 사용하여 PowerShell 스크립트를 자동으로 실행하도록 설정합니다.

  1. 작업 스케줄러 열기: 검색에서 '작업 스케줄러'를 찾아 실행합니다.
  2. 기본 작업 만들기: 작업 스케줄러 라이브러리에서 '기본 작업 만들기'를 클릭합니다.
  3. 작업 이름 및 설명 설정: 이름과 설명을 입력합니다.
  4. 트리거 설정: 작업이 실행될 빈도와 시간을 설정합니다. 예를 들어, 매일 또는 매시간마다 실행되도록 설정할 수 있습니다.
  5. 동작 추가: '프로그램 시작'을 선택하고, 실행할 스크립트의 경로를 입력합니다. PowerShell 실행 명령어는 다음과 같습니다:
    powershell.exe -File "C:\Path\To\YourScript.ps1"
  6. 설정 저장: 설정을 확인하고 작업을 저장합니다.

3. 웹훅 설정

위 스크립트에서 "YOUR_WEBHOOK_URL" 부분을 사용하고자 하는 웹훅 URL로 교체해야 합니다. 이 URL은 Slack, Discord, Teams 등의 플랫폼에서 제공할 수 있습니다. 이렇게 설정하면 정기적으로 실행 중인 서비스의 상태를 확인하고, 변화가 감지될 때마다 웹훅을 통해 알림을 보내게 됩니다.

 

구글 시트에 API를 사용하여 최신 정보를 업데이트하는 프로세스를 설정하려면 다음 단계가 필요합니다. 여기서는 PowerShell을 사용하여 구글 시트 API를 호출하는 방법을 안내하겠습니다. 이 작업은 Google Sheets API를 활성화하고, 서비스 계정을 설정한 후, PowerShell 스크립트를 사용하여 시트를 업데이트하는 과정을 포함합니다.

1. Google Sheets API 활성화 및 서비스 계정 설정

  1. Google Cloud Console에 접속합니다.
  2. 새 프로젝트를 생성합니다.
  3. 생성된 프로젝트 내에서 API 및 서비스로 이동하여 Google Sheets API를 검색하고 활성화합니다.
  4. 사용자 인증 정보 페이지에서 서비스 계정을 생성합니다.
  5. 서비스 계정에 대한 키를 생성하고 JSON 형식으로 다운로드합니다. 이 파일은 이후 API 요청 시 인증에 사용됩니다.

2. 구글 시트 접근 권한 설정

  • 생성한 서비스 계정의 이메일 주소에 구글 시트의 공유 설정에서 편집 권한을 부여합니다.

3. PowerShell 스크립트 작성 및 실행

아래의 PowerShell 스크립트는 Google Sheets API를 사용하여 시트를 업데이트합니다. 이 스크립트는 앞서 생성한 서비스 계정의 JSON 키 파일을 사용하여 인증하고, 지정된 시트에 데이터를 쓰는 기능을 수행합니다.

# 변수 설정
$serviceAccountKeyPath = "C:\Path\To\Your\service-account-key.json"
$spreadsheetId = "your_spreadsheet_id"
$range = "Sheet1!A1"  # 업데이트할 셀 범위
$valueInputOption = "USER_ENTERED"
$values = @(
    @("Data1", "Data2"),
    @("Data3", "Data4")
)

# Google Sheets API 라이브러리 로드
Add-Type -Path "C:\Path\To\Google.Apis.Sheets.v4.dll"

# 서비스 계정 인증 및 SheetsService 객체 생성
$credential = New-Object Google.Apis.Auth.OAuth2.GoogleCredential
$credential = [Google.Apis.Auth.OAuth2.GoogleCredential]::FromFile($serviceAccountKeyPath)
$credential = $credential.CreateScoped("https://www.googleapis.com/auth/spreadsheets")
$service = New-Object Google.Apis.Sheets.v4.SheetsService
$service.Credential = $credential

# 데이터 업데이트를 위한 요청 생성 및 실행
$body = New-Object Google.Apis.Sheets.v4.Data.ValueRange
$body.Values = $values
$request = $service.Spreadsheets.Values.Update($body, $spreadsheetId, $range)
$request.ValueInputOption = $valueInputOption
$result = $request.Execute()

4. 작업 스케줄러를 통한 자동화

  • 위 스크립트를 주기적으로 실행하도록 Windows 작업 스케줄러를 설정하여 자동화할 수 있습니다.

주의 사항

  • 이 스크립트는 Google의 .NET 라이브러리인 Google.Apis.Sheets.v4를 필요로 합니다. 이 라이브러리는 NuGet에서 제공하며, PowerShell을 사용하여 로드해야 합니다.
  • 서비스 계정 키 파일의 보안을 유지하는 것이 중요합니다.

 

이 과정을 통해 구글 시트에 자동으로 데이터를 업데이트할 수 있으며, PowerShell 스크립트를 수정하여 다양한 자동화 작업을 수행할 수 있습니다.

728x90

댓글