Bagikan melalui


Start-Process

Memulai satu atau beberapa proses pada komputer lokal.

Sintaks

Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-Credential <pscredential>]
     [-WorkingDirectory <string>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <string>]
     [-RedirectStandardInput <string>]
     [-RedirectStandardOutput <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-WorkingDirectory <string>]
     [-PassThru]
     [-Verb <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Deskripsi

Cmdlet Start-Process memulai satu atau beberapa proses di komputer lokal. Secara default, Start-Process membuat proses baru yang mewarisi semua variabel lingkungan yang ditentukan dalam proses saat ini.

Untuk menentukan program yang berjalan dalam proses, masukkan file atau file skrip yang dapat dieksekusi, atau file yang dapat dibuka menggunakan program di komputer. Jika Anda menentukan file yang tidak dapat dieksekusi, Start-Process memulai program yang terkait dengan file, mirip dengan cmdlet Invoke-Item.

Anda dapat menggunakan parameter Start-Process untuk menentukan opsi, seperti memuat profil pengguna, memulai proses di jendela baru, atau menggunakan kredensial alternatif.

Contoh

Contoh 1: Memulai proses yang menggunakan nilai default

Contoh ini memulai proses yang menggunakan file Sort.exe di folder saat ini. Perintah menggunakan semua nilai default, termasuk gaya jendela default, folder kerja, dan kredensial.

Start-Process -FilePath "sort.exe"

Contoh 2: Mencetak file teks

Contoh ini memulai proses yang mencetak file C:\PS-Test\MyFile.txt.

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

Contoh 3: Memulai proses untuk mengurutkan item ke file baru

Contoh ini memulai proses yang mengurutkan item dalam file TestSort.txt dan mengembalikan item yang diurutkan dalam file Sorted.txt. Kesalahan apa pun ditulis ke file SortError.txt. Parameter UseNewEnvironment menentukan bahwa proses berjalan dengan variabel lingkungannya sendiri.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

Contoh ini menggunakan splatting untuk meneruskan parameter ke cmdlet. Untuk informasi selengkapnya, lihat about_Splatting.

Contoh 4: Memulai proses di jendela yang dimaksimalkan

Contoh ini memulai proses Notepad.exe. Ini memaksimalkan jendela dan mempertahankan jendela hingga proses selesai.

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

Contoh 5: Memulai PowerShell sebagai administrator

Contoh ini memulai PowerShell menggunakan opsi Jalankan sebagai administrator.

Start-Process -FilePath "powershell" -Verb RunAs

Contoh 6: Menggunakan kata kerja yang berbeda untuk memulai proses

Contoh ini menunjukkan cara menemukan kata kerja yang dapat digunakan saat memulai proses. Kata kerja yang tersedia ditentukan oleh ekstensi nama file file yang berjalan dalam proses.

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.Verbs

open
runas
runasuser

Contoh menggunakan New-Object untuk membuat objek System.Diagnostics.ProcessStartInfo untuk powershell.exe, file yang berjalan dalam proses PowerShell. Properti Verbs dari objek ProcessStartInfo menunjukkan bahwa Anda dapat menggunakan kata kerja Open dan RunAs dengan powershell.exe, atau dengan proses apa pun yang menjalankan file .exe.

Contoh 7: Menentukan argumen ke proses

Kedua perintah memulai penerjemah perintah Windows, mengeluarkan perintah dir pada folder Program Files. Karena nama folder ini berisi spasi, nilai perlu dikelilingi dengan tanda kutip yang lolos. Perhatikan bahwa perintah pertama menentukan string sebagai ArgumentList. Perintah kedua adalah array string.

Start-Process -FilePath "$Env:ComSpec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$Env:ComSpec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""

Contoh 8: Membuat proses yang dilepaskan di Linux

Di Windows, Start-Process membuat proses independen yang tetap berjalan secara independen dari shell peluncuran. Pada platform non-Windows, proses yang baru dimulai dilampirkan ke shell yang diluncurkan. Jika shell peluncuran ditutup, proses anak dihentikan.

Untuk menghindari penghentian proses anak pada platform seperti Unix, Anda dapat menggabungkan Start-Process dengan nohup. Contoh berikut meluncurkan instans latar belakang PowerShell di Linux yang tetap hidup bahkan setelah Anda menutup sesi peluncuran. Perintah nohup mengumpulkan output dalam nohup.out file di direktori saat ini.

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -NoProfile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

Dalam contoh ini, Start-Process menjalankan perintah linux nohup, yang meluncurkan pwsh sebagai proses yang dilepaskan. Untuk informasi selengkapnya, lihat artikel nohup di Wikipedia.

Contoh 9: Mengesampingkan variabel lingkungan untuk proses

Secara default, saat Anda menggunakan Start-Process, proses baru dibuat dengan variabel lingkungan yang sama dengan sesi saat ini. Anda dapat menggunakan parameter Lingkungan untuk mengambil alih nilai variabel tersebut.

Dalam contoh ini, variabel lingkungan FOO ditambahkan ke sesi dengan foo sebagai nilai.

Contoh berjalan Start-Process tiga kali, mengembalikan nilai FOO setiap kali. Perintah pertama tidak mengambil alih variabel lingkungan. Pada perintah kedua, FOO diatur ke bar. Dalam perintah ketiga, FOO diatur ke $null, yang menghapusnya.

$Env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO' -Environment @{
    FOO  = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$Env:FOO' -Environment @{
    FOO  = $null
}

foo
bar

Parameter

-ArgumentList

Menentukan parameter atau nilai parameter yang akan digunakan saat cmdlet ini memulai proses. Argumen dapat diterima sebagai string tunggal dengan argumen yang dipisahkan oleh spasi, atau sebagai array string yang dipisahkan oleh koma. Cmdlet menggabungkan array ke dalam satu string dengan setiap elemen array yang dipisahkan oleh satu spasi.

Kutipan luar string PowerShell tidak disertakan saat nilai ArgumentList diteruskan ke proses baru. Jika parameter atau nilai parameter berisi spasi atau tanda kutip, parameter atau parameter perlu dikelilingi dengan tanda kutip ganda yang lolos. Untuk informasi selengkapnya, lihat about_Quoting_Rules.

Untuk hasil terbaik, gunakan satu nilai ArgumentList yang berisi semua argumen dan karakter kutipan yang diperlukan.

Jenis:String[]
Alias:Args
Position:1
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Confirm

Meminta konfirmasi sebelum menjalankan cmdlet.

Jenis:SwitchParameter
Alias:cf
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Credential

Menentukan akun pengguna yang memiliki izin untuk melakukan tindakan ini. Secara default, cmdlet menggunakan kredensial pengguna saat ini.

Ketik nama pengguna, seperti User01 atau Domain01\User01, atau masukkan objek PSCredential yang dihasilkan oleh cmdlet Get-Credential. Jika Anda mengetikkan nama pengguna, Anda akan diminta untuk memasukkan kata sandi.

Kredensial disimpan dalam objek PSCredential dan kata sandi disimpan sebagai SecureString.

Nota

Untuk informasi selengkapnya tentang perlindungan data SecureString, lihat Seberapa aman SecureString?.

Jenis:PSCredential
Alias:RunAs
Position:Named
Nilai default:Current user
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Environment

Menentukan satu atau beberapa variabel lingkungan yang akan diambil alih untuk proses sebagai tabel hash. Tentukan nama variabel lingkungan sebagai kunci dalam tabel hash dan nilai yang diinginkan. Untuk membatalkan set variabel lingkungan, tentukan nilainya sebagai $null.

Variabel yang ditentukan diganti dalam proses. Saat Anda menentukan variabel lingkungan PATH, variabel tersebut diganti dengan nilai $PSHOME diikuti dengan nilai yang ditentukan dari parameter ini. Di Windows, perintah menambahkan nilai untuk PATH dalam cakupan Mesin dan Pengguna setelah nilai baru.

Parameter ini ditambahkan di PowerShell 7.4.

Jenis:Hashtable
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-FilePath

Menentukan jalur opsional dan nama file program yang berjalan dalam proses. Masukkan nama file yang dapat dieksekusi atau dokumen, seperti file .txt atau .doc, yang terkait dengan program di komputer. Parameter ini diperlukan.

Jika Anda hanya menentukan nama file yang tidak sesuai dengan perintah sistem, gunakan parameter WorkingDirectory untuk menentukan jalur.

Jenis:String
Alias:PSPath, Path
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:False
Terima karakter wildcard:False

-LoadUserProfile

Menunjukkan bahwa cmdlet ini memuat profil pengguna Windows yang disimpan dalam kunci registri HKEY_USERS untuk pengguna saat ini. Parameter tidak berlaku untuk sistem non-Windows.

Parameter ini tidak memengaruhi profil PowerShell. Untuk informasi selengkapnya, lihat about_Profiles.

Jenis:SwitchParameter
Alias:Lup
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-NoNewWindow

Mulai proses baru di jendela konsol saat ini. Secara default di Windows, PowerShell membuka jendela baru. Pada sistem non-Windows, Anda tidak pernah mendapatkan jendela baru.

Anda tidak dapat menggunakan parameter NoNewWindow dan WindowStyle dalam perintah yang sama.

Parameter tidak berlaku untuk sistem non-Windows.

Jenis:SwitchParameter
Alias:nnw
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-PassThru

Mengembalikan objek proses untuk setiap proses yang dimulai cmdlet. Secara default, cmdlet ini tidak menghasilkan output apa pun.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-RedirectStandardError

Menentukan file. Cmdlet ini mengirimkan kesalahan apa pun yang dihasilkan oleh proses ke file yang Anda tentukan. Masukkan jalur dan nama file. Secara default, kesalahan ditampilkan di konsol.

Jenis:String
Alias:RSE
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-RedirectStandardInput

Menentukan file. Cmdlet ini membaca input dari file yang ditentukan. Masukkan jalur dan nama file file input. Secara default, proses mendapatkan inputnya dari keyboard.

Jenis:String
Alias:RSI
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-RedirectStandardOutput

Menentukan file. Cmdlet ini mengirimkan output yang dihasilkan oleh proses ke file yang Anda tentukan. Masukkan jalur dan nama file. Secara default, output ditampilkan di konsol.

Jenis:String
Alias:RSO
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-UseNewEnvironment

Menunjukkan bahwa cmdlet ini menggunakan variabel lingkungan baru yang ditentukan untuk proses tersebut. Secara default, proses dimulai berjalan dengan variabel lingkungan yang diwarisi dari proses induk.

Di Windows, saat Anda menggunakan UseNewEnvironment, proses baru hanya dimulai berisi variabel lingkungan default yang ditentukan untuk cakupan Komputer. Ini memiliki efek samping bahwa $Env:USERNAME diatur ke SYSTEM. Tidak ada variabel dari cakupan Pengguna yang disertakan.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Verb

Menentukan kata kerja yang akan digunakan ketika cmdlet ini memulai proses. Kata kerja yang tersedia ditentukan oleh ekstensi nama file file yang berjalan dalam proses.

Tabel berikut ini memperlihatkan kata kerja untuk beberapa jenis file proses umum.

Jenis file Verba
.Cmd Edit, Open, Print, RunAs, RunAsUser
.exe Open, RunAs, RunAsUser
.txt Open, Print, PrintTo
.wav Open, Play

Untuk menemukan kata kerja yang dapat digunakan dengan file yang berjalan dalam proses, gunakan cmdlet New-Object untuk membuat System.Diagnostics.ProcessStartInfo objek untuk file. Kata kerja yang tersedia ada di properti Verbs objek ProcessStartInfo. Untuk detailnya, lihat contohnya.

Parameter tidak berlaku untuk sistem non-Windows.

Jenis:String
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Wait

Menunjukkan bahwa cmdlet ini menunggu proses yang ditentukan dan turunannya selesai sebelum menerima lebih banyak input. Parameter ini menekan prompt perintah atau mempertahankan jendela hingga proses selesai.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-WhatIf

Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:SwitchParameter
Alias:wi
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-WindowStyle

Menentukan status jendela yang digunakan untuk proses baru. Nilai defaultnya adalah Normal. Nilai yang dapat diterima untuk parameter ini adalah:

  • Normal
  • Hidden
  • Minimized
  • Maximized

Anda tidak dapat menggunakan parameter WindowStyle dan NoNewWindow dalam perintah yang sama.

Parameter tidak berlaku untuk sistem non-Windows. Saat menggunakan pada sistem non-Windows, Anda tidak pernah mendapatkan jendela baru.

Jenis:ProcessWindowStyle
Nilai yang diterima:Normal, Hidden, Minimized, Maximized
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-WorkingDirectory

Menentukan lokasi tempat proses baru harus dimulai.

Ketika tidak ditentukan, cmdlet default ke lokasi yang sepenuhnya memenuhi syarat yang ditentukan dalam parameter FilePath. Jika nilai parameter FilePath tidak sepenuhnya memenuhi syarat, nilai tersebut default ke direktori kerja saat ini dari proses panggilan.

Kartubebas tidak didukung. Jalur tidak boleh berisi karakter yang akan ditafsirkan sebagai kartubebas.

Jenis:String
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

Input

None

Anda tidak dapat menyalurkan objek ke cmdlet ini.

Output

None

Secara default, cmdlet ini tidak mengembalikan output.

Process

Saat Anda menggunakan parameter PassThru, cmdlet ini mengembalikan objek Proses.

Catatan

PowerShell menyertakan alias berikut untuk Start-Process:

  • Semua platform
    • saps
  • Windows
    • start

Perintah asli adalah file yang dapat dieksekusi yang diinstal dalam sistem operasi. Executable ini dapat dijalankan dari shell baris perintah apa pun, seperti PowerShell. Biasanya Anda menjalankan perintah persis seperti yang Anda lakukan di bash atau cmd.exe. Cmdlet Start-Process dapat digunakan untuk menjalankan perintah asli apa pun, tetapi hanya boleh digunakan ketika Anda perlu mengontrol bagaimana perintah dijalankan.

Start-Process berguna untuk menjalankan program GUI pada platform non-Windows. Misalnya, jalankan Start-Process gedit untuk meluncurkan editor teks grafis umum lingkungan GNOME Desktop.

Secara default, Start-Process meluncurkan proses secara asinkron. Kontrol langsung dikembalikan ke PowerShell meskipun proses baru masih berjalan.

  • Pada sistem lokal, proses yang diluncurkan hidup secara independen dari proses panggilan.
  • Pada sistem jarak jauh, proses baru dihentikan ketika sesi jarak jauh berakhir, segera mengikuti perintah Start-Process. Oleh karena itu, Anda tidak dapat menggunakan Start-Process dalam sesi jarak jauh yang mengharapkan proses yang diluncurkan untuk mengungguli sesi.

Jika Anda perlu menggunakan Start-Process dalam sesi jarak jauh, panggil dengan parameter Tunggu. Atau Anda dapat menggunakan metode lain untuk membuat proses baru pada sistem jarak jauh.

Saat menggunakan parameter Wait, Start-Process menunggu pohon proses (proses dan semua turunannya) keluar sebelum mengembalikan kontrol. Ini berbeda dari perilaku cmdlet Wait-Process, yang hanya menunggu proses yang ditentukan keluar.

Di Windows, kasus penggunaan yang paling umum untuk Start-Process adalah menggunakan parameter Tunggu untuk memblokir kemajuan hingga proses baru keluar. Pada sistem non-Windows, ini jarang diperlukan karena perilaku default untuk aplikasi baris perintah setara dengan Start-Process -Wait.

Cmdlet ini diimplementasikan menggunakan metode Mulai kelas System.Diagnostics.Process. Untuk informasi selengkapnya tentang metode ini, lihat metode Process.Start.