programing

배열 또는 목록을 PowerShell 함수에 매개 변수로 전달하는 방법은 무엇입니까?

sourcejob 2023. 8. 22. 22:05
반응형

배열 또는 목록을 PowerShell 함수에 매개 변수로 전달하는 방법은 무엇입니까?

30일 이내에 만료되는 인증서 목록을 얻기 위해 PowerShell 스크립트를 작성하고 있습니다.스크립트는 작동하고 있지만, 문제는 앱과 프레스 서버가 너무 많아서 스크립트 코드를 최소화하고 싶습니다.내 기능은 다음과 같습니다.

function CheckCert($ComputerNames)
{
    $deadline = (Get-Date).AddDays($global:threshold) # Set deadline date
    Invoke-Command -ComputerName $ComputerNames { Dir Cert:\LocalMachine\My } |
        foreach {
            If ($_.NotAfter -le $deadline)
            {
                $_ | Select Issuer, Subject, NotAfter, @{Label="Expires In (Days)";Expression={($_.NotAfter - (Get-Date)).Days}}
            }
        }
}

그리고 저는 이 기능을 다음과 같이 부릅니다.

Switch ($xMenu1)
{
    1 {CheckCert -ComputerNames "CUKIRUNCSVR0242"}
    2 {CheckCert}
    3 {CheckCert}
    ...

저는 serv1, serv2, serv3와 같은 컴퓨터 이름을 전달하고 싶습니다. 이 서버 수는 메뉴에서 선택한 옵션에 따라 1에서 6까지 다양합니다. **또는 다른 환경의 서버 목록을 정의하고 목록 이름을 매개 변수로 전달하고 CheckCert 함수를 수정하여 각 서버에 대해 루프오버하여 만료된 인증서 세부 정보를 가져올 수 있습니까?

Switch ($xMenu1)
{
    1 {CheckCert -ComputerNames CIT_envList}
    2 {CheckCert -ComputerNames SIT_envList}
    3 {CheckCert -ComputerNames Prod_envList}
    ...

서버 목록은 다음과 같습니다.

CIT_envList = serv1, serv2

SIT_envList = serv1, serv2, serv3,

PROD_envList = serv1, serv2, serv3, serv4

사용해 보십시오.

function CheckCert([string[]]$ComputerNames)
{
    $deadline = (Get-Date).AddDays($global:threshold) # Set deadline date
    foreach ($computer in $ComputerNames)
    {
        Invoke-Command -ComputerName $Computer { Dir Cert:\LocalMachine\My } |
        foreach {
            If ($_.NotAfter -le $deadline)
            {
                $_ | Select Issuer, Subject, NotAfter, @{N="Expires In (Days)";E={($_.NotAfter - (Get-Date)).Days}}
            }
        }
    }
}

PS 4.0 이상을 사용하면 다음과 같이 정의할 수 있습니다.CheckCert([array]$ComputerNames)뿐만 아니라.

언급URL : https://stackoverflow.com/questions/22656450/how-do-i-pass-an-array-or-list-as-a-parameter-to-a-powershell-function

반응형