Bagikan melalui


Bab 9 - Fungsi

PowerShell perintah satu baris dan skrip yang sering kali perlu dimodifikasi adalah kandidat yang baik untuk dijadikan fungsi yang bisa digunakan kembali.

Tulislah fungsi-fungsi jika memungkinkan karena fungsi lebih terfokus pada alat. Anda dapat menambahkan fungsi ke modul skrip, menempatkan modul tersebut di lokasi yang ditentukan dalam $env:PSModulePath, dan memanggil fungsi tanpa perlu menemukan tempat Anda menyimpan fungsi. Dengan menggunakan modul PowerShellGet, mudah untuk berbagi modul PowerShell Anda di repositori NuGet. PowerShellGet dikirimkan bersama PowerShell versi 5.0 ke atas. Ini juga tersedia sebagai unduhan terpisah untuk PowerShell versi 3.0 dan yang lebih tinggi.

Jangan terlalu rumit. Sederhanakan dan gunakan cara paling mudah untuk menyelesaikan tugas. Hindari alias dan parameter posisi dalam kode apa pun yang Anda gunakan kembali. Format kode Anda untuk keterbacaan. Jangan menetapkan nilai secara langsung; gunakan parameter dan variabel. Jangan menulis kode yang tidak perlu meskipun tidak menyakiti apa pun. Ini menambahkan kompleksitas yang tidak perlu. Perhatian terhadap detail berjalan jauh saat menulis kode PowerShell apa pun.

Penamaan

Saat menamai fungsi Anda di PowerShell, gunakan nama dengan format Pascal yang memiliki kata kerja standar dan kata benda tunggal. Untuk mendapatkan daftar kata kerja yang disetujui di PowerShell, jalankan Get-Verb. Contoh berikut mengurutkan hasil Get-Verb berdasarkan properti Kata Kerja.

Get-Verb | Sort-Object -Property Verb

Properti Grup memberi Anda gambaran tentang bagaimana kata kerja seharusnya digunakan.

Verb        Group
----        -----
Add         Common
Approve     Lifecycle
Assert      Lifecycle
Backup      Data
Block       Security
Checkpoint  Data
Clear       Common
Close       Common
Compare     Data
Complete    Lifecycle
Compress    Data
Confirm     Lifecycle
Connect     Communications
Convert     Data
ConvertFrom Data
ConvertTo   Data
Copy        Common
Debug       Diagnostic
Deny        Lifecycle
Disable     Lifecycle
Disconnect  Communications
Dismount    Data
Edit        Data
Enable      Lifecycle
Enter       Common
Exit        Common
Expand      Data
Export      Data
Find        Common
Format      Common
Get         Common
Grant       Security
Group       Data
Hide        Common
Import      Data
Initialize  Data
Install     Lifecycle
Invoke      Lifecycle
Join        Common
Limit       Data
Lock        Common
Measure     Diagnostic
Merge       Data
Mount       Data
Move        Common
New         Common
Open        Common
Optimize    Common
Out         Data
Ping        Diagnostic
Pop         Common
Protect     Security
Publish     Data
Push        Common
Read        Communications
Receive     Communications
Redo        Common
Register    Lifecycle
Remove      Common
Rename      Common
Repair      Diagnostic
Request     Lifecycle
Reset       Common
Resize      Common
Resolve     Diagnostic
Restart     Lifecycle
Restore     Data
Resume      Lifecycle
Revoke      Security
Save        Data
Search      Common
Select      Common
Send        Communications
Set         Common
Show        Common
Skip        Common
Split       Common
Start       Lifecycle
Step        Common
Stop        Lifecycle
Submit      Lifecycle
Suspend     Lifecycle
Switch      Common
Sync        Data
Test        Diagnostic
Trace       Diagnostic
Unblock     Security
Undo        Common
Uninstall   Lifecycle
Unlock      Common
Unprotect   Security
Unpublish   Data
Unregister  Lifecycle
Update      Data
Use         Other
Wait        Lifecycle
Watch       Common
Write       Communications

Penting untuk menggunakan kata kerja yang disetujui untuk fungsi PowerShell Anda. Modul yang berisi fungsi dengan kata kerja yang tidak disetujui menghasilkan pesan peringatan saat diimpor ke sesi PowerShell. Pesan peringatan itu membuat fungsi Anda terlihat tidak profesional. Kata kerja yang tidak disetujui juga membatasi kemampuan penemuan fungsi Anda.

Fungsi sederhana

Fungsi di PowerShell dinyatakan dengan kata kunci fungsi diikuti dengan nama fungsi lalu kurung kurawal buka dan tutup ({ }). Kode yang dijalankan oleh fungsi tersebut terdapat di dalam kurung kurawal.

function Get-Version {
    $PSVersionTable.PSVersion
}

Fungsi yang diperlihatkan dalam contoh berikut adalah contoh sederhana yang mengembalikan versi PowerShell.

Get-Version
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  693

Saat Anda menggunakan nama generik untuk fungsi Anda, seperti Get-Version, itu dapat menyebabkan konflik penamaan. Perintah default yang ditambahkan di masa mendatang atau perintah yang mungkin ditulis orang lain dapat berkonflik dengan perintah tersebut. Awali bagian kata benda dari nama fungsi Anda untuk membantu mencegah konflik penamaan. Misalnya: <ApprovedVerb>-<Prefix><SingularNoun>.

Contoh berikut menggunakan awalan PS.

function Get-PSVersion {
    $PSVersionTable.PSVersion
}

Selain namanya, fungsi ini identik dengan yang sebelumnya.

Get-PSVersion
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  693

Anda masih dapat memiliki konflik nama bahkan ketika Anda menambahkan awalan ke kata benda. Saya ingin mengawali kata benda fungsi saya dengan inisial saya. Kembangkan standar dan berpegang teguh padanya.

function Get-MrPSVersion {
    $PSVersionTable.PSVersion
}

Fungsi ini tidak berbeda dari dua sebelumnya, kecuali untuk menggunakan nama yang lebih unik untuk mencoba mencegah konflik penamaan dengan perintah PowerShell lainnya.

Get-MrPSVersion
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  693

Setelah dimuat ke dalam memori, Anda dapat melihat fungsi pada Function PSDrive.

Get-ChildItem -Path Function:\Get-*Version
CommandType     Name                                               Version
-----------     ----                                               -------
Function        Get-Version
Function        Get-PSVersion
Function        Get-MrPSVersion

Jika Anda ingin menghapus fungsi ini dari sesi Anda saat ini, hapus fungsi tersebut dari Function PSDrive atau tutup dan buka kembali PowerShell.

Get-ChildItem -Path Function:\Get-*Version | Remove-Item

Verifikasi bahwa fungsi memang dihapus.

Get-ChildItem -Path Function:\Get-*Version

Jika fungsi dimuat sebagai bagian dari modul, Anda dapat membongkar modul untuk menghapusnya.

Remove-Module -Name <ModuleName>

cmdlet Remove-Module menghapus modul PowerShell dari memori di sesi PowerShell Anda saat ini. Ini tidak menghapusnya dari sistem atau disk Anda.

Parameter

Jangan tetapkan nilai secara statis. Gunakan parameter dan variabel sebagai gantinya. Saat menamai parameter Anda, gunakan nama yang sama dengan cmdlet default untuk nama parameter Anda jika memungkinkan.

Dalam fungsi berikut, perhatikan bahwa saya menggunakan ComputerName dan bukan Computer, ServerName, atau Host untuk nama parameter. Menggunakan ComputerName menstandarkan nama parameter agar sesuai dengan penamaan dan penggunaan huruf besar/kecil parameter seperti cmdlet bawaan.

function Test-MrParameter {

    param (
        $ComputerName
    )

    Write-Output $ComputerName

}

Fungsi berikut mengkueri semua perintah pada sistem Anda dan mengembalikan angka dengan nama parameter tertentu.

function Get-MrParameterCount {
    param (
        [string[]]$ParameterName
    )

    foreach ($Parameter in $ParameterName) {
        $Results = Get-Command -ParameterName $Parameter -ErrorAction SilentlyContinue

        [pscustomobject]@{
            ParameterName   = $Parameter
            NumberOfCmdlets = $Results.Count
        }
    }
}

Seperti yang Anda lihat dalam hasil berikut, 39 perintah yang memiliki parameter ComputerName. Tidak ada perintah apa pun dengan parameter seperti Komputer , ServerName, Host, atau Machine.

Get-MrParameterCount -ParameterName ComputerName, Computer, ServerName,
    Host, Machine
ParameterName NumberOfCmdlets
------------- ---------------
ComputerName               39
Computer                    0
ServerName                  0
Host                        0
Machine                     0

Gunakan kasus yang sama untuk nama parameter Anda dengan cmdlet default. Misalnya, gunakan ComputerName, bukan computername. Skema penamaan ini membantu orang-orang yang terbiasa dengan PowerShell menemukan fungsi Anda dan terlihat dan terasa seperti cmdlet default.

Pernyataan param memungkinkan Anda menentukan satu atau beberapa parameter. Koma (,) memisahkan definisi parameter. Untuk informasi selengkapnya, lihat about_Functions_Advanced_Parameters.

Fungsi tingkat lanjut

Mengubah fungsi menjadi fungsi tingkat lanjut di PowerShell sederhana. Salah satu perbedaan antara fungsi dan fungsi tingkat lanjut adalah bahwa fungsi tingkat lanjut memiliki parameter umum yang secara otomatis ditambahkan. Parameter umum termasuk parameter seperti Verbose dan Debug.

Mulailah dengan fungsi Test-MrParameter yang digunakan di bagian sebelumnya.

function Test-MrParameter {

    param (
        $ComputerName
    )

    Write-Output $ComputerName

}

Ada beberapa cara berbeda untuk melihat parameter umum. Salah satunya adalah dengan melihat sintaks dengan Get-Command.

Get-Command -Name Test-MrParameter -Syntax

Perhatikan bahwa fungsi Test-MrParameter tidak memiliki parameter umum.

Test-MrParameter [[-ComputerName] <Object>]

Langkah lainnya adalah memeriksa secara mendalam properti dari parameter Get-Command.

(Get-Command -Name Test-MrParameter).Parameters.Keys
ComputerName

Tambahkan atribut CmdletBinding untuk mengubah fungsi menjadi fungsi tingkat lanjut.

function Test-MrCmdletBinding {

    [CmdletBinding()] # Turns a regular function into an advanced function
    param (
        $ComputerName
    )

    Write-Output $ComputerName

}

Saat Anda menentukan CmdletBinding, parameter umum ditambahkan secara otomatis. CmdletBinding memerlukan blok param, tetapi blok param dapat kosong.

Get-Command -Name Test-MrCmdletBinding -Syntax
Test-MrCmdletBinding [[-ComputerName] <Object>] [<CommonParameters>]

Menelusuri lebih lanjut properti parameter dari Get-Command menunjukkan nama-nama parameter yang sebenarnya, termasuk yang umum.

(Get-Command -Name Test-MrCmdletBinding).Parameters.Keys
ComputerName
Verbose
Debug
ErrorAction
WarningAction
InformationAction
ErrorVariable
WarningVariable
InformationVariable
OutVariable
OutBuffer
PipelineVariable

MendukungPemrosesan

Atribut SupportsShouldProcess menambahkan WhatIf dan Confirm sebagai parameter mitigasi risiko. Parameter ini hanya diperlukan untuk perintah yang membuat perubahan.

function Test-MrSupportsShouldProcess {

    [CmdletBinding(SupportsShouldProcess)]
    param (
        $ComputerName
    )

    Write-Output $ComputerName

}

Perhatikan bahwa sekarang ada parameter WhatIf dan Konfirmasi.

Get-Command -Name Test-MrSupportsShouldProcess -Syntax
Test-MrSupportsShouldProcess [[-ComputerName] <Object>] [-WhatIf] [-Confirm]
[<CommonParameters>]

Sekali lagi, Anda juga dapat menggunakan Get-Command untuk mengembalikan daftar nama parameter sesungguhnya, termasuk yang umum, bersama dengan WhatIf dan Confirm.

(Get-Command -Name Test-MrSupportsShouldProcess).Parameters.Keys
ComputerName
Verbose
Debug
ErrorAction
WarningAction
InformationAction
ErrorVariable
WarningVariable
InformationVariable
OutVariable
OutBuffer
PipelineVariable
WhatIf
Confirm

Validasi parameter

Validasi input di awal proses. Jangan izinkan kode Anda terus berjalan di jalur ketika tidak dapat diselesaikan tanpa masukan yang valid.

Selalu tentukan jenis data untuk variabel yang digunakan untuk parameter. Dalam contoh berikut, String ditentukan sebagai tipe data untuk parameter ComputerName. Validasi ini membatasinya hanya untuk mengizinkan satu nama komputer yang ditentukan untuk parameter ComputerName.

function Test-MrParameterValidation {

    [CmdletBinding()]
    param (
        [string]$ComputerName
    )

    Write-Output $ComputerName

}

Kesalahan dihasilkan jika lebih dari satu nama komputer ditentukan.

Test-MrParameterValidation -ComputerName Server01, Server02
Test-MrParameterValidation : Cannot process argument transformation on
parameter 'ComputerName'. Cannot convert value to type System.String.
At line:1 char:42
+ Test-MrParameterValidation -ComputerName Server01, Server02
+                                          ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-MrParameterValidation]
   , ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Test-MrP
   arameterValidation

Masalah dengan definisi saat ini adalah valid untuk menghilangkan nilai dari parameter ComputerName, tetapi nilai diperlukan agar fungsi dapat diselesaikan dengan berhasil. Skenario ini adalah di mana atribut parameter Mandatory bermanfaat.

Sintaks yang digunakan dalam contoh berikut kompatibel dengan PowerShell versi 3.0 dan yang lebih tinggi. [Parameter(Mandatory=$true)] dapat ditentukan untuk membuat fungsi kompatibel dengan PowerShell versi 2.0 atau yang lebih tinggi.

function Test-MrParameterValidation {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$ComputerName
    )

    Write-Output $ComputerName

}

Sekarang setelah ComputerName diperlukan, jika tidak ditentukan, fungsi akan meminta nama tersebut.

Test-MrParameterValidation
cmdlet Test-MrParameterValidation at command pipeline position 1
Supply values for the following parameters:
ComputerName:

Jika Anda ingin mengizinkan lebih dari satu nilai untuk parameter ComputerName, gunakan jenis data String tetapi tambahkan kurung siku () ke tipe data untuk mengizinkan array string.

function Test-MrParameterValidation {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string[]]$ComputerName
    )

    Write-Output $ComputerName

}

Mungkin Anda ingin menentukan nilai default untuk parameter ComputerName jika tidak ditentukan. Masalahnya adalah bahwa nilai default tidak dapat digunakan dengan parameter wajib. Sebagai gantinya, gunakan atribut validasi parameter ValidateNotNullOrEmpty dengan nilai default.

Bahkan saat mengatur nilai default, cobalah untuk tidak menggunakan nilai statis. Dalam contoh berikut, $env:COMPUTERNAME digunakan sebagai nilai default, yang secara otomatis diterjemahkan ke nama komputer lokal jika nilai tidak disediakan.

function Test-MrParameterValidation {

    [CmdletBinding()]
    param (
        [ValidateNotNullOrEmpty()]
        [string[]]$ComputerName = $env:COMPUTERNAME
    )

    Write-Output $ComputerName

}

Keluaran terperinci

Komentar sebaris berguna jika Anda menulis kode kompleks, tetapi pengguna tidak melihatnya kecuali mereka melihat kode.

Fungsi dalam contoh berikut memiliki komentar sebaris dalam perulangan foreach. Meskipun komentar khusus ini mungkin tidak sulit ditemukan, bayangkan jika fungsi berisi ratusan baris kode.

function Test-MrVerboseOutput {

    [CmdletBinding()]
    param (
        [ValidateNotNullOrEmpty()]
        [string[]]$ComputerName = $env:COMPUTERNAME
    )

    foreach ($Computer in $ComputerName) {
        #Attempting to perform an action on $Computer <<-- Don't use
        #inline comments like this, use write verbose instead.
        Write-Output $Computer
    }

}

Opsi yang lebih baik adalah menggunakan Write-Verbose alih-alih komentar sebaris.

function Test-MrVerboseOutput {

    [CmdletBinding()]
    param (
        [ValidateNotNullOrEmpty()]
        [string[]]$ComputerName = $env:COMPUTERNAME
    )

    foreach ($Computer in $ComputerName) {
        Write-Verbose -Message "Attempting to perform an action on $Computer"
        Write-Output $Computer
    }

}

Output verbose tidak ditampilkan ketika fungsi dipanggil tanpa parameter Verbose.

Test-MrVerboseOutput -ComputerName Server01, Server02

Output verbose ditampilkan ketika fungsi dipanggil dengan parameter Verbose.

Test-MrVerboseOutput -ComputerName Server01, Server02 -Verbose

Input alur kerja

Kode tambahan diperlukan ketika Anda ingin fungsi Anda menerima input alur. Seperti disebutkan sebelumnya dalam buku ini, perintah dapat menerima input alur berdasarkan nilai (berdasarkan jenis) atau menurut nama properti. Anda dapat menulis fungsi Anda seperti perintah asli sehingga mereka menerima salah satu atau kedua jenis input ini.

Untuk menerima input alur berdasarkan nilai, tentukan atribut parameter ValueFromPipeline untuk parameter tertentu tersebut. Anda hanya dapat menerima input alur berdasarkan nilai dari satu parameter setiap jenis data. Jika Anda memiliki dua parameter yang menerima input string, hanya salah satunya yang dapat menerima input alur berdasarkan nilai. Jika Anda menentukan berdasarkan nilai untuk kedua parameter string, input tidak akan tahu parameter mana yang akan diikat. Skenario ini merupakan alasan lain mengapa saya menyebut input alur ini bertipe berdasarkan tipe daripada berdasarkan nilai.

Input pipeline diterima satu per satu, mirip dengan cara item ditangani dalam perulangan foreach. Blok process diperlukan untuk memproses setiap item jika fungsi Anda menerima array sebagai input. Jika fungsi Anda hanya menerima satu nilai sebagai input, blok process tidak diperlukan tetapi direkomendasikan untuk konsistensi.

function Test-MrPipelineInput {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipeline)]
        [string[]]$ComputerName
    )

    process {
        Write-Output $ComputerName
    }

}

Menerima input alur berdasarkan nama properti serupa, kecuali Anda menentukannya dengan atribut parameter ValueFromPipelineByPropertyName, dan dapat ditentukan untuk sejumlah parameter terlepas dari jenis data. Kuncinya adalah output perintah yang disalurkan harus memiliki nama properti yang cocok dengan nama parameter atau alias parameter fungsi Anda.

function Test-MrPipelineInput {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipelineByPropertyName)]
        [string[]]$ComputerName
    )

    process {
            Write-Output $ComputerName
    }

}

begin dan blok end bersifat opsional. begin ditentukan sebelum blok process dan digunakan untuk melakukan pekerjaan awal sebelum item diterima dari alur. Nilai yang dimasukkan tidak dapat diakses di blok begin. Blok end ditentukan setelah blok process dan digunakan untuk pembersihan setelah semua item yang disalurkan diproses.

Penanganan kesalahan

Fungsi yang ditunjukkan dalam contoh berikut menghasilkan pengecualian yang tidak tertangani ketika komputer tidak dapat dihubungi.

function Test-MrErrorHandling {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipeline,
                   ValueFromPipelineByPropertyName)]
        [string[]]$ComputerName
    )

    process {
        foreach ($Computer in $ComputerName) {
            Test-WSMan -ComputerName $Computer
        }
    }

}

Ada beberapa cara berbeda untuk menangani kesalahan di PowerShell. Try/Catch adalah cara yang lebih modern untuk menangani kesalahan.

function Test-MrErrorHandling {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipeline,
                   ValueFromPipelineByPropertyName)]
        [string[]]$ComputerName
    )

    process {
        foreach ($Computer in $ComputerName) {
            try {
                Test-WSMan -ComputerName $Computer
            }
            catch {
                Write-Warning -Message "Unable to connect to Computer: $Computer"
            }
        }
    }

}

Meskipun fungsi yang ditunjukkan dalam contoh sebelumnya menggunakan penanganan kesalahan, fungsi tersebut menghasilkan pengecualian yang tidak tertangani karena perintah tidak menghasilkan kesalahan penghentian. Hanya kesalahan penghentian yang terdeteksi. Tentukan parameter ErrorAction dengan nilai Stop untuk mengubah kesalahan non-terminasi menjadi kesalahan terminasi.

function Test-MrErrorHandling {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipeline,
                   ValueFromPipelineByPropertyName)]
        [string[]]$ComputerName
    )

    process {
        foreach ($Computer in $ComputerName) {
            try {
                Test-WSMan -ComputerName $Computer -ErrorAction Stop
            }
            catch {
                Write-Warning -Message "Unable to connect to Computer: $Computer"
            }
        }
    }

}

Jangan ubah variabel $ErrorActionPreference global kecuali benar-benar diperlukan. Jika Anda mengubahnya dalam cakupan lokal, cakupan tersebut akan kembali ke nilai sebelumnya saat Anda keluar dari cakupan tersebut.

Jika Anda menggunakan sesuatu seperti .NET langsung dari dalam fungsi PowerShell, Anda tidak dapat menentukan parameter ErrorAction pada perintah itu sendiri. Anda dapat mengubah variabel $ErrorActionPreference tepat sebelum memanggil metode .NET.

Bantuan berbasis komentar

Menambahkan bantuan ke fungsi Anda dianggap sebagai praktik terbaik. Bantuan memungkinkan orang yang Anda bagi tahu cara menggunakannya.

function Get-MrAutoStoppedService {

<#
.SYNOPSIS
    Returns a list of services that are set to start automatically, are not
    currently running, excluding the services that are set to delayed start.

.DESCRIPTION
    Get-MrAutoStoppedService is a function that returns a list of services
    from the specified remote computer(s) that are set to start
    automatically, are not currently running, and it excludes the services
    that are set to start automatically with a delayed startup.

.PARAMETER ComputerName
    The remote computer(s) to check the status of the services on.

.PARAMETER Credential
    Specifies a user account that has permission to perform this action. The
    default is the current user.

.EXAMPLE
     Get-MrAutoStoppedService -ComputerName 'Server1', 'Server2'

.EXAMPLE
     'Server1', 'Server2' | Get-MrAutoStoppedService

.EXAMPLE
     Get-MrAutoStoppedService -ComputerName 'Server1' -Credential (Get-Credential)

.INPUTS
    String

.OUTPUTS
    PSCustomObject

.NOTES
    Author:  Mike F. Robbins
    Website: https://mikefrobbins.com
    Twitter: @mikefrobbins
#>

    [CmdletBinding()]
    param (

    )

    #Function Body

}

Saat Anda menambahkan bantuan berbasis komentar ke fungsi Anda, bantuan dapat diambil dari fungsi tersebut seperti perintah bawaan.

Semua sintaks untuk menulis fungsi di PowerShell bisa tampak luar biasa bagi seseorang yang baru memulai. Jika Anda tidak dapat mengingat sintaks untuk sesuatu, buka instans kedua PowerShell Integrated Scripting Environment (ISE) pada monitor terpisah dan lihat cuplikan "Cmdlet (fungsi lanjutan) - Selesai" saat mengetikkan kode untuk fungsi Anda. Cuplikan dapat diakses di PowerShell ISE menggunakan kombinasi tombol Ctrl + J.

Ringkasan

Dalam bab ini, Anda mempelajari dasar-dasar fungsi penulisan di PowerShell, termasuk cara:

  • Membuat fungsi tingkat lanjut
  • Gunakan validasi parameter
  • Gunakan output rinci
  • Mendukung input jalur
  • Menangani kesalahan
  • Membuat bantuan berbasis komentar

Resensi

  1. Bagaimana Anda mendapatkan daftar kata kerja yang disetujui di PowerShell?
  2. Bagaimana Anda mengubah fungsi PowerShell menjadi fungsi tingkat lanjut?
  3. Kapan parameter WhatIf dan Confirm harus ditambahkan ke fungsi PowerShell Anda?
  4. Bagaimana Anda mengubah kesalahan yang tidak berakhir menjadi kesalahan yang berakhir?
  5. Mengapa Anda harus menambahkan bantuan berbasis komentar ke fungsi Anda?

Referensi

Langkah selanjutnya

Di Bab 10, Anda akan mempelajari cara mengemas fungsi ke dalam modul skrip. Anda akan menjelajahi struktur modul, manifes, mengekspor perintah publik, dan praktik terbaik untuk mengatur, berbagi, dan memelihara alat PowerShell yang dapat digunakan kembali.