Construir funções no PowerShell é uma ótima maneira de tornar seus scripts modulares e reutilizáveis. Mas se você deseja que essas funções sejam adaptáveis em diferentes cenários, adicionar parâmetros de função pode levá-las ao próximo nível.
Neste tutorial, vamos expandir uma função básica de log adicionando parâmetros para controlar a mensagem de log, o caminho do arquivo e a validação.
Ao final, você verá como os parâmetros podem tornar suas funções versáteis, resistentes a erros e poderosas adições ao seu kit de ferramentas do PowerShell.
Definindo a Função Básica Write-Log
Vamos começar com uma função básica que recebe um único parâmetro de entrada para a mensagem de log e a anexa a um arquivo de log padrão com um carimbo de data e hora.
Neste exemplo:
- O parâmetro
$LogMessage
é marcado como obrigatório, portanto o PowerShell o solicita se você não fornecer um valor. - Cada entrada de log inclui um carimbo de data e hora formatado como
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" }
Testando a Função Write-Log
Agora que a função Write-Log
possui uma estrutura básica e aceita parâmetros, é hora de testar sua funcionalidade. Testar ajuda a garantir que cada aspecto da função, desde as configurações padrão até as entradas personalizadas, funcione conforme o esperado e lide com erros de forma elegante.
Teste a função Write-Log
chamando-a com uma mensagem personalizada:
Write-Log -LogMessage 'Testing a new log message'
Este comando adiciona uma nova entrada com um carimbo de data e hora ao arquivo de log (C:\Scripts\software_installer.log).
Algumas coisas a serem observadas sobre a função 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. |
---|---|
Processo de Registro Simplificado | A função abstrai detalhes como obter a data e hora atual com Get-Date e anexar conteúdo com Add-Content . Como usuário da função, você pode se concentrar apenas em escrever mensagens no arquivo de log sem precisar lembrar desses detalhes. |
Melhoria na Legibilidade do Código | A função registra explicitamente mensagens em um arquivo de log designado, deixando claro que o propósito é o registro, e não apenas escrever em um arquivo de texto genérico. Isso torna o código mais autoexplicativo e mais fácil de entender à primeira vista. |
Com essas melhorias, a função Write-Log
ajuda a simplificar tarefas de registro, tornando scripts mais limpos e mais fáceis de manter.
Você pode visualizar a última mensagem de log verificando o conteúdo do arquivo de log:
Get-Content -Path "C:\Scripts\software_installer.log"
Este comando exibe todas as entradas de log, incluindo sua última mensagem com um carimbo de data/hora.
Mas talvez você tenha chamado acidentalmente Write-Log
sem um parâmetro LogMessage
:
Write-Log
Você perceberá que — porque LogMessage
é obrigatório — o PowerShell impedirá a execução da função. No entanto, se LogMessage
não fosse obrigatório, uma mensagem vazia seria gravada, criando uma entrada não intencional de “oops”.
Verifique o resultado verificando novamente o arquivo de log:
Get-Content -Path "C:\Scripts\software_installer.log"
Adicionando Flexibilidade com um Caminho de Arquivo de Log Personalizado
Enquanto a função funciona muito bem, vamos torná-la ainda mais flexível adicionando um parâmetro $LogFilePath
. Esse parâmetro permite que você especifique um caminho de arquivo personalizado ao mesmo tempo que fornece um caminho padrão.
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" }
Observe que $LogFilePath
possui um caminho padrão de C:\Scripts\software_installer.log
, mas você pode fornecer qualquer caminho válido.
Para especificar um caminho de arquivo diferente, chame Write-Log
desta forma:
Write-Log -LogMessage 'Custom path log message' -LogFilePath 'C:\Scripts\custom_log.log'
Exigindo o Caminho do Arquivo com ValidateScript
Você não quer que sua função registre arquivos que não existem. Por esse motivo, você pode garantir que o arquivo exista antes de fazer o log usando o atributo de parâmetro ValidateScript
. Esse atributo permite que você execute código contra o valor de um parâmetro, verificando-o antes de executar a função.
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" }
Com o ValidateScript
, o Write-Log
verifica se o caminho do arquivo que você fornece existe. Se o arquivo não existir, o PowerShell para e retorna um erro.
Você pode criar um arquivo vazio antes de chamá-lo para garantir que a função funcione conforme o esperado:
Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value '' Write-Log -LogMessage 'Log entry in a new file' -LogFilePath 'C:\Scripts\softwarex_installer.log'
Testando a Funcionalidade e Validações do Write-Log
Após adicionar flexibilidades à sua função, é natural testar se ela funciona conforme o previsto. Você deve garantir uma funcionalidade robusta de log examinando o atributo ValidateScript
e ver como ele aprimora sua função Write-Log
.
Vamos ver como o ValidateScript
funciona tentando fazer log em um arquivo inexistente:
Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'
Neste caso, o atributo ValidateScript
verifica se o caminho do arquivo de log especificado existe chamando Test-Path
. Se o caminho não existir, a função retorna um erro.
A função falha porque C:\Scripts\softwarex_installer.log
não existe. Você pode verificar isso executando Test-Path
manualmente:
Test-Path 'C:\Scripts\softwarex_installer.log'
Como Test-Path
retorna $false
, o arquivo está realmente ausente.
Para corrigir isso, crie um arquivo de log em branco e teste novamente.
Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value '' Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'
Agora, a função funciona como esperado.
Confirme o resultado vendo o arquivo de log:
Get-Content -Path 'C:\Scripts\softwarex_installer.log'
Usar ValidateScript
e outros atributos de validação de parâmetros garante o uso correto dos parâmetros da função, reduzindo erros e tornando suas funções PowerShell mais confiáveis.
Conclusão
Adicionar parâmetros às funções PowerShell aumenta muito sua flexibilidade e utilidade. Com uma combinação de valores padrão, atributos obrigatórios e validação, suas funções podem lidar com uma variedade de entradas enquanto mantêm a confiabilidade.
Usando essas técnicas, você agora pode construir funções escaláveis e amigáveis que se encaixam perfeitamente em vários scripts.
Expanda essas habilidades à medida que cria ferramentas PowerShell mais avançadas para otimizar e aprimorar seu fluxo de trabalho. Confira este tutorial de Parâmetros PowerShell e aprofunde-se nos parâmetros de função!
Source:
https://adamtheautomator.com/powershell-function-parameters/