Aracılığıyla paylaş


about_Functions_Advanced

Kısa açıklama

Betikleri kullanarak cmdlet oluşturmanın bir yolu olan gelişmiş işlevleri tanıtır.

Uzun açıklama

Cmdlet, PowerShell'in işlem hattı semantiğine katılan tek bir komuttır. Buna ikili cmdlet'ler, PowerShell gelişmiş işlevleri ve CDXML cmdlet'leri dahildir.

Gelişmiş işlevler, PowerShell işlevi olarak yazılmış cmdlet'ler oluşturmanıza olanak tanır. Gelişmiş işlevler, ikili bir cmdlet yazmak ve derlemek zorunda kalmadan cmdlet oluşturmayı kolaylaştırır. İkili cmdlet'ler, C# gibi bir .NET dilinde yazılmış .NET sınıflarıdır.

Gelişmiş işlevler, cmdlet'ler gibi davranan işlevler olarak tanımlamak için CmdletBinding özniteliğini kullanır. CmdletBinding özniteliği, sınıfı cmdlet olarak tanımlamak için derlenmiş cmdlet sınıflarında kullanılan Cmdlet özniteliğine benzer. Bu öznitelik hakkında daha fazla bilgi için bkz. about_Functions_CmdletBindingAttribute.

İşlevin parametreleri, param() deyiminde bildirilen değişkenlerdir. İsteğe bağlı [Parameter()] özniteliğini tek başına veya [Alias()] özniteliği veya parametre doğrulama özniteliklerinden herhangi biriyle birlikte kullanabilirsiniz. Parametreleri bildirme hakkında daha fazla bilgi için bkz. about_Functions_Advanced_Parameters.

Aşağıdaki örnekte, bir ad kabul eden ve ardından sağlanan adı kullanarak bir selamlama yazdıran bir işlev gösterilmektedir. Ayrıca bu işlevin derlenmiş cmdlet'in fiil-isim çifti gibi bir fiil (Gönder) ve isim (Selamlama) çifti içeren bir ad tanımladığını da fark edin. Ancak, işlevlerin fiil-isim adına sahip olması gerekmez.

function Send-Greeting
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]$Name
    )

    process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

Bu işlev, derleme cmdlet'lerinde kullanılan process yöntemine eşdeğer olan bloğunda çalışmayı gerçekleştirir. process bloğu ve diğer adlandırılmış bloklar about_Functions_Advanced_Methodsiçinde açıklanmıştır.

Gelişmiş işlevler, derlenmiş cmdlet'lerden aşağıdaki yollarla farklıdır:

  • Bir dizi dize Boole parametresine bağlı olduğunda gelişmiş işlev parametresi bağlaması özel durum oluşturmaz.
  • ValidateSet özniteliği ve ValidatePattern özniteliği adlandırılmış parametreleri geçiremez.
  • Gelişmiş işlevler işlemlerde kullanılamaz.

PIPELINESTOPTOKEN

PowerShell 7.6-preview.4 sürümünden başlayarak $PSCmdlet, PowerShell durdurma olay kaynağına bağlı bir PipelineStopToken erişmeye olanak sağlayan özelliğini içerir. PowerShell işlem hattı durma isteği aldığında belirteç tetikleniyor. Yöntem dönene kadar beklemek yerine istendiğinde yöntemden çıkmak için bir CancellationToken aşırı yükleme kabul eden bir .NET yöntemiyle kullanın.

Aşağıdaki örnekte işlev, ağ yavaş olduğunda veya çok fazla veri döndürülürken yanıt vermesi zaman alabilen HttpClient.GetStringAsyncçağrısı yapar.

function Invoke-CancelableWebRequest {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]
        $Url
    )

    $client = [System.Net.Http.HttpClient]::new()
    $client.GetStringAsync(
        $Url,
        $PSCmdlet.PipelineStopToken).GetAwaiter().GetResult()
}

Invoke-CancelableWebRequest -Url https://httpbin.org/delay/10
# Press ctrl+c to cancel

Ayrıca bakınız