Categories
Dokumentasi

PowerShell, Koding dan Signing: Contoh Kasus Kirim SMS

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
https://bptsi.unisayogya.ac.id/powershell-koding-dan-signing-contoh-kasus-kirim-sms/ 2020-11-12 18:59:34

Daftar Isi

Persiapan Membuat Skrip di PowerShell: Membuat Sertifikat

  1. Buka PowerShell ISE sebagai administrator
  2. Setelah terbuka, akan terbuka editor dengan judul Untitled.ps1
  3. 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"
  1. Jalankan skrip dengan menekan tombol Run Script (segitiga hijau) atau tekan F5
  2. Salin password sertifikat di atas.
  3. 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

  1. Kirimkan Sertifikat beserta passwordnya
  2. 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

  1. Buka PowerShell ISE
  2. Eksekusi perintah secara manual. Apabila berhasil, maka dapat digunakan, seperti pada gambar berikut
  3. 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

  1. Jalankan perintah berikut di PowerShell.
$MyCertFromPfx = Get-PfxCertificate -FilePath D:\SertifikatKu.pfx
Set-AuthenticodeSignature -PSPath D:\SendSms.ps1 -Certificate $MyCertFromPfx
  1. Kirimkan Skrip
  2. 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

task-scheduler-kirimSMS
task-scheduler-kirimSMS

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;

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

One reply on “PowerShell, Koding dan Signing: Contoh Kasus Kirim SMS”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.