PowerShell mulai diperkenalkan pada Windows 7. PowerShell adalah sebuah command line dan media menjalankan skrip yang lebih bertenaga dibandingkan dengan Command Prompt. Sebagian besar perintah yang dapat digunakan di Command Prompt dapat digunakan juga di PowerShell.
PowerShell pada Windows dapat digunakan untuk penjadwalan task, semacam crontab di linux. Pada prakteknya dapat digunakan untuk mengirim SMS atau pesan melalui media lain secara otomatis.
— PowerShell, Koding dan Signing: Contoh Kasus Kirim SMS
Daftar Isi
Persiapan Membuat Skrip di PowerShell: Membuat Sertifikat
- Buka PowerShell ISE sebagai administrator
- Setelah terbuka, akan terbuka editor dengan judul Untitled.ps1
- Masukkan kode berikut
$CertificateName = "Sertifikat Saya"
$OutPutPFXFilePath = "D:\SertifikatKu.pfx"
$MyStrongPassword = ConvertTo-SecureString -String "PasswordKuatDariSertifikatku!" -Force -AsPlainText
#not after untuk memberikan tangga kadaluarsa, di contoh ini adalah 60 bulan, default-nya hanya 12 bulan
New-SelfSignedCertificate -NotAfter (Get-Date).AddMonths(60) -subject $CertificateName -Type CodeSigning | Export-PfxCertificate -FilePath $OutPutPFXFilePath -password $MyStrongPassword
Write-Output "PFX Certificate `"$CertificateName`" exported: $OutPutPFXFilePath"
- Jalankan skrip dengan menekan tombol Run Script (segitiga hijau) atau tekan F5
- Salin password sertifikat di atas.
- Buka Command Prompt, kemudian jalankan perintah di bawah ini. Isi password dengan cara klik kanan pada Command Prompt, kemudian tekan enter. Jika tidak bisa, maka password diketik.
certutil D:\SertifikatKu.pfx
Import Sertifikat
- Kirimkan Sertifikat beserta passwordnya
- Jalankan perintah berikut ini
$myPfx = "D:\SertifikatKu.pfx"
$MyStrongPassword = ConvertTo-SecureString -String "PasswordKuatDariSertifikatku!" -Force -AsPlainText
#How to import your Self signed PFX
#Personal
Import-PfxCertificate -FilePath $myPfx -CertStoreLocation "cert:\LocalMachine\My" -Password $MyStrongPassword
#TrustedPublisher
Import-PfxCertificate -FilePath $myPfx -CertStoreLocation "cert:\LocalMachine\Root" -Password $MyStrongPassword
#Root
Import-PfxCertificate -FilePath $myPfx -CertStoreLocation "cert:\LocalMachine\TrustedPublisher" -Password $MyStrongPassword
Skrip Kirim SMS
|-Kondisi Awal
- Modem sudah terpasang
- Gammu sudah terinstall dan telah dicoba berhasil mengirimkan sms, tips berkaitan dengan gammu:
- perintah gammu identify untuk mengidentifikasi device yang digunakan
- perintah gammu-detect untuk memberi panduan dalam membuat berkas konfgurasi
- cek https://wammu.eu/phones/, kemudian pilih device yang sesuai dan apabila beruntung maka akan mendapatkan konfigurasi yang disetujui dengan tanda ada tulisan Approved
|-Skrip
- Buka PowerShell ISE
- Eksekusi perintah secara manual. Apabila berhasil, maka dapat digunakan, seperti pada gambar berikut
- Simpan skrip, misalnya D:\SendSms.ps1, dengan skrip sebagai berikut:
#url web yang akan dibaca
$URL = "https://alamatapi.com/apidatasms"
#membaca url
$HTML = Invoke-WebRequest -Uri $URL
#mendapatkan text tampil (tanpa html)
$postParams = @{token='abcdefghijk'}
$HTML = Invoke-WebRequest -Uri $URL -Method POST -Body $postParams
$text = $HTML.ParsedHtml.getElementsByTagName("body")[0].innerText | ConvertFrom-Json
ForEach ($value in $text)
{
#siapkan string sms, kemudian kirim
$arg = [string]::join("",(("--config C:\PathGammu\bin\gammurc sendsms TEXT " + $value.nomorhp + " -text ""Yth " + $value.nama + " bahwa ...""").Split("`n")))
$kirimSms = Start-Process -NoNewWindow -FilePath "C:\PathGammu\bin\gammu.exe" -ArgumentList $arg -Wait
if ($KirimSMS.Contains("ok"))
{
#siapkan URL flag sudah selesai SMS, kemudian kirim
$URLFlagSms = "https://alamatapi.com/flagsudahsms/" + $value.id;
$setTerkirim = Invoke-WebRequest -Uri $URLFlagSms -Method POST -Body $postParams
}
}
catatan:--config
harus disertakan karena secara bawaan gammu menggunakan path saat ini untuk membaca konfigurasinya, tidak memperhatikan path gammu yang sedang dieksekusi. Jika path gammu adalah C:\PathGammu\bin\gammu.exe, maka path konfigurasi yang digunakan bukanlah C:\PathGammu\bin\, tapi bisa jadi C:\, jika C:\ merupakan path saat ini
Menandatangani Skrip PowerShell
- Jalankan perintah berikut di PowerShell.
$MyCertFromPfx = Get-PfxCertificate -FilePath D:\SertifikatKu.pfx
Set-AuthenticodeSignature -PSPath D:\SendSms.ps1 -Certificate $MyCertFromPfx
- Kirimkan Skrip
- Jalankan langkah Import Sertifikat di atas (sekali saja)
Cara Menjalankan
|-Manual
Jalankan perintah di Command Prompt
powershell -executionpolicy remotesigned -File D:\SendSMS.ps1
|-Otomatis Secara Berulang
Jalankan perintah di PowerShell satu kali
#perintah yang akan dijalankan secara otomatis
$aksi = New-ScheduledTaskAction -execute "powershell" -argument "-executionpolicy remotesigned -File D:\SendSms.ps1"
#interval eksekusi, misalnya setiap 15 menit
$interval = (New-TimeSpan -Minutes 15)
#buat jadwal eksekusi
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $interval
#daftarkan penjadwalan
Register-ScheduledTask -TaskName kirimSMS -Trigger $trigger -Action $aksi
Set-ScheduledTask kirimSMS -Trigger $trigger
Cek penjadwalan di Task Scheduler
Hash
#ini adalah contoh menggunakan hash di PowerShell
$text = "The string to hash goes here";
(Out-String -InputObject (new-object System.Security.Cryptography.SHA512Managed | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($text))} | ForEach-Object {$_.ToString("x2")})).Replace([Environment]::NewLine, '');
(Out-String -InputObject (new-object System.Security.Cryptography.SHA256Managed | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($text))} | ForEach-Object {$_.ToString("x2")})).Replace([Environment]::NewLine, '');
(Out-String -InputObject (new-object System.Security.Cryptography.MD5CryptoServiceProvider | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($text))} | ForEach-Object {$_.ToString("x2")})).Replace([Environment]::NewLine, '');
#ini adalah contoh yang lebih kompleks
$salt1="salt1"
$salt2="salt2"
(Out-String -InputObject (new-object System.Security.Cryptography.SHA512Managed | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes((Out-String -InputObject (new-object System.Security.Cryptography.MD5CryptoServiceProvider | ForEach-Object {$_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($text + $salt1))} | ForEach-Object {$_.ToString("x2")})).Replace([Environment]::NewLine, '') + $salt2))} | ForEach-Object {$_.ToString("x2")}).Replace([Environment]::NewLine, ''));
UUID
$Uniqid=(Out-String -InputObject (New-Guid)).Split([Environment]::NewLine)[6];
echo $Uniqid;
One reply on “PowerShell, Koding dan Signing: Contoh Kasus Kirim SMS”
[…] tanda tangani skrip dengan perintah seperti pada https://pdsi.unisayogya.ac.id/powershell-koding-dan-signing-contoh-kasus-kirim-sms/#tanda-tangan-skr… dan jalankan seperti pada […]