about_Scripts

Deskripsi singkat

Menjelaskan cara menjalankan dan menulis skrip di PowerShell.

Deskripsi panjang

Skrip adalah file teks biasa yang berisi satu atau beberapa perintah PowerShell. Skrip PowerShell memiliki .ps1 ekstensi file.

Menjalankan skrip sangat mirip dengan menjalankan cmdlet. Anda mengetik jalur dan nama file skrip dan menggunakan parameter untuk mengirimkan data dan mengatur opsi. Anda dapat menjalankan skrip pada komputer Anda atau dalam sesi jarak jauh pada komputer lain.

Menulis skrip menyimpan perintah untuk digunakan nanti dan memudahkan untuk berbagi dengan orang lain. Yang paling penting, ini memungkinkan Anda menjalankan perintah hanya dengan mengetik jalur skrip dan nama file. Skrip bisa sesingkat satu perintah dalam file atau seleksfir program yang kompleks.

Skrip memiliki fitur tambahan, seperti #Requires komentar khusus, penggunaan parameter, dukungan untuk bagian data, dan penandatanganan digital untuk keamanan. Anda juga dapat menulis topik Bantuan untuk skrip dan untuk fungsi apa pun dalam skrip.

Cara menjalankan skrip

Sebelum dapat menjalankan skrip di Windows, Anda perlu mengubah kebijakan eksekusi PowerShell default. Kebijakan eksekusi tidak berlaku untuk PowerShell yang berjalan di platform non-Windows.

Kebijakan eksekusi default, Restricted, mencegah semua skrip berjalan, termasuk skrip yang Anda tulis di komputer lokal. Untuk informasi selengkapnya, lihat about_Execution_Policies.

Kebijakan eksekusi disimpan di registri, jadi Anda hanya perlu mengubahnya sekali di setiap komputer.

Untuk mengubah kebijakan eksekusi, gunakan prosedur berikut.

Pada prompt perintah, ketik:

Set-ExecutionPolicy AllSigned

atau

Set-ExecutionPolicy RemoteSigned

Perubahan ini segera efektif.

Untuk menjalankan skrip, ketik nama lengkap dan jalur lengkap ke file skrip.

Misalnya, untuk menjalankan skrip Get-ServiceLog.ps1 di direktori C:\Scripts, ketik:

C:\Scripts\Get-ServiceLog.ps1

Untuk menjalankan skrip di direktori saat ini, ketik jalur ke direktori saat ini, atau gunakan titik untuk mewakili direktori saat ini, diikuti dengan garis miring terbelakang jalur (.\).

Misalnya, untuk menjalankan skrip ServicesLog.ps1 di direktori lokal, ketik:

.\Get-ServiceLog.ps1

Jika skrip memiliki parameter, ketik parameter dan nilai parameter setelah nama file skrip.

Misalnya, perintah berikut menggunakan parameter ServiceName dari skrip Get-ServiceLog untuk meminta log aktivitas layanan WinRM.

.\Get-ServiceLog.ps1 -ServiceName WinRM

Sebagai fitur keamanan, PowerShell tidak menjalankan skrip saat Anda mengklik dua kali ikon skrip di File Explorer atau saat Anda mengetik nama skrip tanpa jalur lengkap, bahkan ketika skrip berada di direktori saat ini. Untuk informasi selengkapnya tentang menjalankan perintah dan skrip di PowerShell, lihat about_Command_Precedence.

Menjalankan dengan PowerShell

Dimulai di PowerShell 3.0, Anda dapat menjalankan skrip dari File Explorer.

Untuk menggunakan fitur "Jalankan dengan PowerShell":

Jalankan File Explorer, klik kanan nama file skrip lalu pilih "Jalankan dengan PowerShell".

Fitur "Jalankan dengan PowerShell" dirancang untuk menjalankan skrip yang tidak memiliki parameter yang diperlukan dan tidak mengembalikan output ke prompt perintah.

Untuk informasi selengkapnya, lihat about_Run_With_PowerShell.

Menjalankan skrip pada komputer lain

Untuk menjalankan skrip pada satu atau beberapa komputer jarak jauh, gunakan parameter FilePath cmdlet Invoke-Command .

Masukkan jalur dan nama file skrip sebagai nilai parameter FilePath . Skrip harus berada di komputer lokal atau di direktori yang dapat diakses komputer lokal.

Perintah berikut menjalankan Get-ServiceLog.ps1 skrip pada komputer jarak jauh bernama Server01 dan Server02.

Invoke-Command -ComputerName Server01,Server02 -FilePath `
  C:\Scripts\Get-ServiceLog.ps1

Mendapatkan bantuan untuk skrip

Cmdlet Get-Help mendapatkan topik bantuan untuk skrip serta untuk cmdlet dan jenis perintah lainnya. Untuk mendapatkan topik bantuan untuk skrip, ketik Get-Help diikuti dengan jalur dan nama file skrip. Jika jalur skrip berada dalam variabel lingkungan Anda Path , Anda dapat menghilangkan jalur.

Misalnya, untuk mendapatkan bantuan untuk skrip ServicesLog.ps1, ketik:

get-help C:\admin\scripts\ServicesLog.ps1

Cara menulis skrip

Skrip dapat berisi perintah PowerShell yang valid, termasuk perintah tunggal, perintah yang menggunakan alur, fungsi, dan struktur kontrol seperti pernyataan If dan Perulangan For.

Untuk menulis skrip, buka file baru di editor teks, ketik perintah, dan simpan dalam file dengan nama file yang valid dengan .ps1 ekstensi file.

Contoh berikut adalah skrip sederhana yang mendapatkan layanan yang berjalan pada sistem saat ini dan menyimpannya ke file log. Nama file log dibuat dari tanggal saat ini.

$date = (get-date).dayofyear
get-service | out-file "$date.log"

Untuk membuat skrip ini, buka editor teks atau editor skrip, ketik perintah ini, lalu simpan dalam file bernama ServiceLog.ps1.

Parameter dalam skrip

Untuk menentukan parameter dalam skrip, gunakan pernyataan Param. Pernyataan Param harus menjadi pernyataan pertama dalam skrip, kecuali untuk komentar dan pernyataan apa pun #Require .

Parameter skrip berfungsi seperti parameter fungsi. Nilai parameter tersedia untuk semua perintah dalam skrip. Semua fitur parameter fungsi, termasuk atribut Parameter dan argumen bernamanya, juga valid dalam skrip.

Saat menjalankan skrip, pengguna skrip mengetik parameter setelah nama skrip.

Contoh berikut menunjukkan Test-Remote.ps1 skrip yang memiliki parameter ComputerName . Kedua fungsi skrip dapat mengakses nilai parameter ComputerName .

param ($ComputerName = $(throw "ComputerName parameter is required."))

function CanPing {
   $error.clear()
   $tmp = test-connection $computername -erroraction SilentlyContinue

   if (!$?)
       {write-host "Ping failed: $ComputerName."; return $false}
   else
       {write-host "Ping succeeded: $ComputerName"; return $true}
}

function CanRemote {
    $s = new-pssession $computername -erroraction SilentlyContinue

    if ($s -is [System.Management.Automation.Runspaces.PSSession])
        {write-host "Remote test succeeded: $ComputerName."}
    else
        {write-host "Remote test failed: $ComputerName."}
}

if (CanPing $computername) {CanRemote $computername}

Untuk menjalankan skrip ini, ketik nama parameter setelah nama skrip. Contohnya:

C:\PS> .\test-remote.ps1 -computername Server01

Ping succeeded: Server01
Remote test failed: Server01

Untuk informasi selengkapnya tentang pernyataan Param dan parameter fungsi, lihat about_Functions dan about_Functions_Advanced_Parameters.

Menulis bantuan untuk skrip

Anda dapat menulis topik bantuan untuk skrip dengan menggunakan salah satu dari dua metode berikut:

  • Bantuan Comment-Based untuk Skrip

    Buat topik Bantuan dengan menggunakan kata kunci khusus di komentar. Untuk membuat Bantuan berbasis komentar untuk skrip, komentar harus ditempatkan di awal atau akhir file skrip. Untuk informasi selengkapnya tentang Bantuan berbasis komentar, lihat about_Comment_Based_Help.

  • Bantuan XML-Based untuk Skrip

    Buat topik Bantuan berbasis XML, seperti jenis yang biasanya dibuat untuk cmdlet. Bantuan berbasis XML diperlukan jika Anda menerjemahkan topik Bantuan ke dalam beberapa bahasa.

Untuk mengaitkan skrip dengan topik Bantuan berbasis XML, gunakan . Kata kunci komentar Bantuan ExternalHelp. Untuk informasi selengkapnya tentang kata kunci ExternalHelp, lihat about_Comment_Based_Help. Untuk informasi selengkapnya tentang bantuan berbasis XML, lihat Cara Menulis Bantuan Cmdlet.

Mengembalikan nilai keluar

Secara default, skrip tidak mengembalikan status keluar saat skrip berakhir. Anda harus menggunakan exit pernyataan untuk mengembalikan kode keluar dari skrip. Secara default, exit pernyataan mengembalikan 0. Anda dapat memberikan nilai numerik untuk mengembalikan status keluar yang berbeda. Kode keluar bukan nol biasanya menandakan kegagalan.

Pada Windows, angka apa pun antara [int]::MinValue dan [int]::MaxValue diperbolehkan.

Pada Unix, hanya angka positif antara [byte]::MinValue (0) dan [byte]::MaxValue (255) yang diizinkan. Angka negatif dalam rentang -1-255 through secara otomatis diterjemahkan ke dalam angka positif dengan menambahkan 256. Misalnya, -2 diubah menjadi 254.

Di PowerShell, exit pernyataan menetapkan nilai $LASTEXITCODE variabel. Di Windows Command Shell (cmd.exe), pernyataan keluar menetapkan nilai %ERRORLEVEL% variabel lingkungan.

Argumen apa pun yang non-numerik atau di luar rentang khusus platform diterjemahkan ke nilai 0.

Cakupan skrip dan sumber titik

Setiap skrip berjalan dalam cakupannya sendiri. Fungsi, variabel, alias, dan drive yang dibuat dalam skrip hanya ada dalam cakupan skrip. Anda tidak dapat mengakses item ini atau nilainya dalam cakupan tempat skrip berjalan.

Untuk menjalankan skrip dalam cakupan yang berbeda, Anda dapat menentukan cakupan, seperti Global atau Lokal, atau Anda dapat membuat sumber titik skrip.

Fitur sumber titik memungkinkan Anda menjalankan skrip dalam cakupan saat ini alih-alih dalam cakupan skrip. Saat Anda menjalankan skrip yang bersumber titik, perintah dalam skrip berjalan seolah-olah Anda telah mengetikkannya di prompt perintah. Fungsi, variabel, alias, dan drive yang dibuat skrip dibuat dalam cakupan tempat Anda bekerja. Setelah skrip berjalan, Anda dapat menggunakan item yang dibuat dan mengakses nilainya di sesi Anda.

Untuk membuat sumber titik skrip, ketik titik (.) dan spasi sebelum jalur skrip.

Contohnya:

. C:\scripts\UtilityFunctions.ps1

atau

. .\UtilityFunctions.ps1

UtilityFunctions.ps1 Setelah skrip berjalan, fungsi dan variabel yang dibuat skrip ditambahkan ke cakupan saat ini.

Misalnya, UtilityFunctions.ps1 skrip membuat New-Profile fungsi dan $ProfileName variabel .

#In UtilityFunctions.ps1

function New-Profile
{
  Write-Host "Running New-Profile function"
  $profileName = split-path $profile -leaf

  if (test-path $profile)
    {write-error "Profile $profileName already exists on this computer."}
  else
    {new-item -type file -path $profile -force }
}

Jika Anda menjalankan UtilityFunctions.ps1 skrip dalam cakupan skripnya sendiri, New-Profile fungsi dan $ProfileName variabel hanya ada saat skrip berjalan. Ketika skrip keluar, fungsi dan variabel dihapus, seperti yang ditunjukkan dalam contoh berikut.

C:\PS> .\UtilityFunctions.ps1

C:\PS> New-Profile
The term 'new-profile' is not recognized as a cmdlet, function, operable
program, or script file. Verify the term and try again.
At line:1 char:12
+ new-profile <<<<
   + CategoryInfo          : ObjectNotFound: (new-profile:String) [],
   + FullyQualifiedErrorId : CommandNotFoundException

C:\PS> $profileName
C:\PS>

Saat Anda melakukan sumber titik skrip dan menjalankannya, skrip membuat New-Profile fungsi dan $ProfileName variabel dalam sesi Anda dalam cakupan Anda. Setelah skrip berjalan, Anda dapat menggunakan New-Profile fungsi dalam sesi Anda, seperti yang ditunjukkan dalam contoh berikut.

C:\PS> . .\UtilityFunctions.ps1

C:\PS> New-Profile

    Directory: C:\Users\juneb\Documents\WindowsPowerShell

    Mode    LastWriteTime     Length Name
    ----    -------------     ------ ----
    -a---   1/14/2009 3:08 PM      0 Microsoft.PowerShellISE_profile.ps1

C:\PS> $profileName
Microsoft.PowerShellISE_profile.ps1

Untuk informasi selengkapnya tentang cakupan, lihat about_Scopes.

Skrip dalam modul

Modul adalah sekumpulan sumber daya PowerShell terkait yang dapat didistribusikan sebagai unit. Anda dapat menggunakan modul untuk mengatur skrip, fungsi, dan sumber daya lainnya. Anda juga dapat menggunakan modul untuk mendistribusikan kode Anda kepada orang lain, dan untuk mendapatkan kode dari sumber tepercaya.

Anda dapat menyertakan skrip dalam modul, atau Anda dapat membuat modul skrip, yang merupakan modul yang terdiri sepenuhnya atau terutama dari skrip dan sumber daya pendukung. Modul skrip hanyalah skrip dengan ekstensi file .psm1.

Untuk informasi selengkapnya tentang modul, lihat about_Modules.

Fitur skrip lainnya

PowerShell memiliki banyak fitur berguna yang dapat Anda gunakan dalam skrip.

  • #Requires - Anda dapat menggunakan #Requires pernyataan untuk mencegah skrip berjalan tanpa modul atau snap-in tertentu dan versi PowerShell tertentu. Untuk informasi selengkapnya, lihat about_Requires.

  • $PSCommandPath - Berisi jalur lengkap dan nama skrip yang sedang dijalankan. Parameter ini valid di semua skrip. Variabel otomatis ini diperkenalkan di PowerShell 3.0.

  • $PSScriptRoot - Berisi direktori tempat skrip dijalankan. Di PowerShell 2.0, variabel ini hanya valid dalam modul skrip (.psm1). Dimulai di PowerShell 3.0, ini valid di semua skrip.

  • $MyInvocation - Variabel $MyInvocation otomatis berisi informasi tentang skrip saat ini, termasuk informasi tentang cara memulai atau "dipanggil." Anda dapat menggunakan variabel ini dan propertinya untuk mendapatkan informasi tentang skrip saat sedang berjalan. Misalnya, $MyInvocation. Variabel MyCommand.Path berisi jalur dan nama file skrip. $MyInvocation. Baris berisi perintah yang memulai skrip, termasuk semua parameter dan nilai.

    Dimulai di PowerShell 3.0, $MyInvocation memiliki dua properti baru yang menyediakan informasi tentang skrip yang memanggil atau memanggil skrip saat ini. Nilai properti ini hanya diisi ketika pemanggil atau pemanggil adalah skrip.

    • PSCommandPath berisi jalur lengkap dan nama skrip yang memanggil atau memanggil skrip saat ini.

    • PSScriptRoot berisi direktori skrip yang memanggil atau memanggil skrip saat ini.

    $PSCommandPath Tidak seperti variabel dan $PSScriptRoot otomatis, yang berisi informasi tentang skrip saat ini, properti PSCommandPath dan PSScriptRoot dari $MyInvocation variabel berisi informasi tentang skrip yang disebut skrip saat ini.

  • Bagian data - Anda dapat menggunakan Data kata kunci untuk memisahkan data dari logika dalam skrip. Bagian data juga dapat mempermudah pelokalan. Untuk informasi selengkapnya, lihat about_Data_Sections dan about_Script_Internationalization.

  • Penandatanganan Skrip - Anda dapat menambahkan tanda tangan digital ke skrip. Bergantung pada kebijakan eksekusi, Anda dapat menggunakan tanda tangan digital untuk membatasi eksekusi skrip yang dapat menyertakan perintah yang tidak aman. Untuk informasi selengkapnya, lihat about_Execution_Policies dan about_Signing.

Lihat juga