PowerShell 함수 매개변수: 더 나은 함수 구축을 위한 실용적인 가이드

PowerShell에서 함수를 작성하는 것은 스크립트를 모듈식으로 만들고 재사용할 수 있는 좋은 방법입니다. 그러나 이러한 함수를 다양한 시나리오에 적응할 수 있게 하려면 함수 매개변수를 추가하여 다음 수준으로 이동할 수 있습니다.

이 튜토리얼에서는 기본 로깅 함수를 확장하여 로그 메시지, 파일 경로 및 유효성을 제어하는 매개변수를 추가합니다.

마지막에는 매개변수가 함수를 다양하고 오류에 강건하며 강력한 PowerShell 도구상자의 중요한 추가 요소로 만드는 방법을 확인할 수 있습니다.

기본 Write-Log 함수 정의하기

로그 메시지를 입력 매개변수로 받아 타임스탬프가 있는 표준 로그 파일에 추가하는 기본 함수부터 시작하겠습니다.

이 예시에서:

  • $LogMessage 매개변수는 필수로 표시되어 있어 값을 제공하지 않으면 PowerShell이 프롬프트를 표시합니다.
  • 각 로그 항목에는 HH:mm:ss 형식으로 포맷된 타임스탬프가 포함됩니다.
function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path "C:\Scripts\software_installer.log" -Value "$timeGenerated - $LogMessage"
}

Write-Log 함수 테스트하기

Write-Log 함수가 기본 구조를 갖추고 매개변수를 받도록 구성된 것을 고려하면 이제 기능을 테스트할 시간입니다. 테스트는 기대대로 각 부분이 작동하고 오류를 정상적으로 처리하는 것을 보장하는 데 도움이 됩니다.

사용자 지정 메시지로 Write-Log 함수를 테스트하십시오:

Write-Log -LogMessage 'Testing a new log message'

이 명령은 로그 파일(C:\Scripts\software_installer.log)에 타임스탬프와 함께 새 항목을 추가합니다.

Write-Log 함수에 대해 주목해야 할 몇 가지 사항:

Standardized Information Logging By setting a default path for the log file, you don’t have to specify the file name every time you call the function. This standardizes all log information to a single file, keeping your logs organized.
간소화된 로깅 프로세스 이 함수는 현재 날짜 및 시간을 가져오거나 내용을 추가하는 것과 같은 세부 정보를 추상화합니다. 이 함수를 사용하면 이러한 세부 정보를 기억하지 않고 로그 파일에 메시지를 작성하는 데 집중할 수 있습니다.
개선된 코드 가독성 이 함수는 명시적으로 지정된 로그 파일에 메시지를 기록하므로 목적이 로깅인지 일반 텍스트 파일에 쓰기인지 명확해집니다. 이로써 코드가 더 명확해지고 한눈에 이해하기 쉬워집니다.

이러한 개선으로 Write-Log 함수를 사용하면 로깅 작업이 간소화되어 스크립트가 더 깔끔하고 유지보수가 더 쉬워집니다.

로그 파일의 내용을 확인하여 최신 로그 메시지를 볼 수 있습니다:

Get-Content -Path "C:\Scripts\software_installer.log"

이 명령은 타임스탬프와 함께 최신 메시지를 포함한 모든 로그 항목을 표시합니다.

그러나 아마도 LogMessage 매개변수 없이 Write-Log를 실수로 호출했을 수도 있습니다:

Write-Log

LogMessage가 필수 사항이기 때문에 PowerShell은 함수가 실행되지 않도록 방지합니다. 그러나 LogMessage가 필수 사항이 아니라면 빈 메시지가 작성되어 의도치 않은 “oops” 항목이 생길 수 있습니다.

결과를 확인하기 위해 로그 파일을 다시 확인하세요:

Get-Content -Path "C:\Scripts\software_installer.log"

사용자 정의 로그 파일 경로로 유연성 추가

함수가 잘 작동하는 동안 $LogFilePath 매개변수를 추가하여 더 유연하게 만들어 보겠습니다. 이 매개변수를 사용하면 사용자 정의 파일 경로를 지정하면서 기본 경로를 제공할 수 있습니다.

function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage,

        [Parameter()]
        [string]$LogFilePath = 'C:\Scripts\software_installer.log'
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path $LogFilePath -Value "$timeGenerated - $LogMessage"
}

$LogFilePath는 기본 경로가 C:\Scripts\software_installer.log인 것에 유의하십시오. 그러나 임의의 유효한 경로를 제공할 수 있습니다.

다른 파일 경로를 지정하려면 다음과 같이 Write-Log를 호출하십시오:

Write-Log -LogMessage 'Custom path log message' -LogFilePath 'C:\Scripts\custom_log.log'

ValidateScript를 사용하여 파일 경로 강제화

함수가 존재하지 않는 파일을 기록하는 것을 원하지 않습니다. 이를 위해 ValidateScript 매개변수 속성을 사용하여 기록하기 전에 파일이 존재하는지 확인할 수 있습니다. 이 속성을 사용하면 함수를 실행하기 전에 매개변수 값에 코드를 실행하여 확인할 수 있습니다.

function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage,

        [Parameter()]
        [ValidateScript({ Test-Path -Path $_ })]
        [string]$LogFilePath = 'C:\Scripts\software_installer.log'
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path $LogFilePath -Value "$timeGenerated - $LogMessage"
}

ValidateScript를 사용하여 Write-Log는 제공하는 파일 경로가 존재하는지 확인합니다. 파일이 존재하지 않으면 PowerShell이 중단되고 오류가 반환됩니다.

함수가 예상대로 작동하는지 확인하려면 호출하기 전에 빈 파일을 생성할 수 있습니다:

Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value ''
Write-Log -LogMessage 'Log entry in a new file' -LogFilePath 'C:\Scripts\softwarex_installer.log'

Write-Log 기능 및 유효성 검사 테스트

함수에 유연성을 추가한 후에는 의도한 대로 작동하는지 테스트하는 것이 당연합니다. ValidateScript 속성을 검토하여 로깅 기능을 강화하고 Write-Log 함수가 어떻게 향상되는지 확인해야 합니다.

ValidateScript가 작동하는 방식을 알아보기 위해 존재하지 않는 파일에 로그인을 시도해 보겠습니다:

Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'

이 경우에는 ValidateScript 속성이 Test-Path를 호출하여 지정된 로그 파일 경로가 있는지 확인합니다. 경로가 존재하지 않으면 함수가 오류를 반환합니다.

함수가 실패하는 이유는 C:\Scripts\softwarex_installer.log가 존재하지 않기 때문입니다. 이를 확인하려면 수동으로 Test-Path를 실행할 수 있습니다:

Test-Path 'C:\Scripts\softwarex_installer.log'

Test-Path$false를 반환하므로 파일이 실제로 누락되었습니다.

이를 해결하려면 빈 로그 파일을 만들고 다시 테스트하세요.

Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value ''
Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'

이제 함수가 예상대로 작동합니다.

로그 파일을 확인하여 결과를 확인하세요:

Get-Content -Path 'C:\Scripts\softwarex_installer.log'

ValidateScript 및 다른 매개변수 유효성 검사 속성을 사용하면 함수 매개변수의 올바른 사용을 강제하여 오류를 줄이고 PowerShell 함수를 더 신뢰할 수 있게 만듭니다.

결론

PowerShell 함수에 매개변수를 추가하면 유연성과 유용성이 크게 향상됩니다. 기본 값, 필수 속성 및 유효성 검사의 조합을 사용하여 함수가 신뢰성을 유지하면서 다양한 입력을 처리할 수 있습니다.

이러한 기술을 사용하면 다양한 스크립트에 매끄럽게 통합되는 확장 가능하고 사용자 친화적인 함수를 작성할 수 있습니다.

더 나아가면서 더 복잡한 PowerShell 도구를 만들어 워크플로를 효율적으로 개선해보세요. 이 PowerShell Parameters 튜토리얼을 확인하여 함수 매개변수에 대해 자세히 알아보세요!

Source:
https://adamtheautomator.com/powershell-function-parameters/