Tag: powershell

  • Windows Subsystem for Linux Installation Guide for Windows 10

    เพื่อเป็นการไม่เสียเวลา เริ่ม

    • เปิด Powershell ด้วยสิทธิ์ของ Administrator แล้วพิมพ์คำสั่ง ต่อไปนี้เพื่อเปิดใช้งาน “Windows Subsystem for Linux” หรือ wsl โดยจะเป็นรุ่น 1 หรือ wsl1
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    wsl1
    • ปรับรุ่นให้เป็นรุ่น 2 โดย Windows 10 ที่ใช้งาน ต้องเป็น Windows 10 version 2004, Build 19041 1903, Build 18362 ขึ้นไปเท่านั้น
    • ตรวจสอบรุ่นของ Windows ด้วยคำสั่ง winver (start->run)
    winver
    • เปิดใช้งาน Virtual Machine Platform พิมพ์คำสั่งต่อไปนี้ ใน powershell ของ administrator
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    Virtual Machine Platform
    • restart เครื่องเพื่อให้การปรับรุ่น wsl1 เป็น wsl2 สมบูรณ์
    • ตั้งค่าให้ wsl2 เป็นค่าเริ่มต้นด้วยคำสั่ง
    wsl --set-default-version 2
    Set default wsl2
    • ซึ่งจะเจอข้อความตามภาพ ให้ไปดาวน์โหลด kernel ได้จาก https://aka.ms/wsl2kernel โหลดมาแล้วติดตั้งให้เรียบร้อย (Next technology)
    download kernel
    • สั่งคำสั่งเดิมอีกครั้งเพื่อตั้งค่าให้ wsl เป็นรุ่น 2 เป็นค่าเริ่มต้น
    Set default wsl2
    • สามารถดูรายละเอียดความแตกต่างของ wsl2 ได้ที่ https://aka.ms/wsl2
    • ติดตั้ง Linux ที่ต้องการจาก Microsoft Store หรือคลิกลิงค์ด้านล่างเพื่อเข้า Microsoft Store
    ubuntu 20.04
    • ติดตั้งเสร็จแล้วคลิก Launch ใน Microsoft Store
    • จะเป็นการเปิดหน้าของลินุกส์ขึ้นมาและให้ตั้งค่าต่างๆ username และ password
    Setup
    • ตั้งค่าเสร็จได้ดังภาพ
    Fin
    • ตั้งค่าลินุกส์ให้เป็น wsl2 ตรวจสอบว่าเป็นรุ่นไหนอยู่ด้วยคำสั่ง
    wsl --list --verbose
    check version
    • ซึ่งถ้าหากยังเป็นรุ่น 1 สามารถเปลี่ยนได้ด้วยคำสั่ง
    wsl --set-version <distribution name> <versionNumber>
    • โดยแทนที่ <distribution name> ด้วยชื่อเต็มที่ได้จากคำสั่ง wsl –list –verbose เช่น Ubuntu-20.04 และ <versionNumber> ด้วย 1 หรือ 2 ตามต้องการ
    • จบขอให้สนุก

    ต้นฉบับ

    https://docs.microsoft.com/en-us/windows/wsl/install-win10

  • Windows Terminal (1)

    เบื่อ cmd ใช้ Windows Terminal แทนกันดีกว่า… ให้ดูรูปก่อน

    สวยงามตระการตา!!!

    บางคนใช้แล้วอาจจะมีความสุข

    เริ่มได้

    • เหมาะสำหรับ Windows 10 version 1909 ขึ้นไป
    • ติดตั้ง Git
    • ติดตั้ง Windows Terminal จาก Microsoft Store หรือ จาก Github

    ถ้าหากติดตั้งจาก Github ต้องติดตั้ง Desktop Bridge VC++ v14 Redistributable Package ด้วย และโปรแกรมจะไม่อัพเดตตัวเองต้องโหลดมาปรับรุ่นเองทุกครั้ง

    ระวัง!!!
    • ติดตั้งแล้วเปิดใช้งานจะได้หน้าตาประมาณนี้
    • เราจะเปลี่ยนหน้าตากันเริ่มจากพิมพ์คำสั่งต่อไปนี้ (ต้องเชื่อมต่ออินเตอร์เน็ต)
    Install-Module posh-git -Scope CurrentUser
    Install-Module oh-my-posh -Scope CurrentUser

    Posh-Git เอาไว้แสดงข้อมูลของ Git ใน prompt
    Oh-My-Posh เป็น theme สวยๆ ของ powershell นั่นเอง

    • ต่อด้วยคำสั่ง
    Set-ExecutionPolicy Unrestricted -Scope CurrentUser
    • ตรวจสอบโฟลเดอร์สำหรับเก็บ Profile ของ PowerShell ด้วยคำสั่ง
    echo $PROFILE
    • สร้างแฟ้ม $PROFILE (ไฟล์ขื่อ Microsoft.PowerShell_profile.ps1 ในโฟลเดอร์ C:\Users\haruo\OneDrive\Documents\WindowsPowerShell\) โดยมีข้อความต่อไปนี้
    Import-Module posh-git
    Import-Module oh-my-posh
    Set-Theme Paradox
    • ปิดแล้วเปิดใหม่ก็จะได้ดังภาพ
    • จะเห็นว่ามีเครื่องหมาย  อยู่ที่ prompt ด้วยจำเป็นต้องลงฟอนท์เพิ่มเติมนั่นคือฟอนท์ Powerline ซึ่งสามารถติดตั้งโดยโหลด Cascadia Code มาติดตั้ง
    • เมื่อติดตั้งแล้วให้เปลี่ยนฟอนท์ของ Windows Terminal โดยคลิก แล้วเลือก Settings
    • จะเป็นการเปิดการตั้งค่า default ที่เรียกใช้งานอยู่ ด้วย default text editor
    • เลื่อน cursor ลงมาประมาณบรรทัดที่ 38 แล้วกด enter เพิ่มข้อความว่า
    "fontFace": "Cascadia Code PL",
    "fontSize": 10,
    • save แล้วไปดูผลได้เลย
    • สวยแล้ว!
    • จบขอให้สนุก
    • Oh-My-Posh ยังมี Theme อื่นๆ ลองเข้าไปเลือกดูได้
    • เปลี่ยน theme ได้โดยแก้แฟ้ม $PROFILE เปลี่ยนจาก Paradox เป็นอย่างอื่นเช่น Darkblood เป็นต้น save ปิดแล้วเปิด Windows Terminal ใหม่
  • วิธีการติดตั้ง Docker บน Windows Server 2016

    “อยากติดตั้ง Docker บน Windows Server 2016 ทำอย่างไร”

             Feature ใหม่ของ Windows Server 2016 คือการใช้งาน Docker ที่สมบูรณ์มากขึ้น โดยใช้การจัดการผ่าน PowerShell Command แต่ยังไงก็ตามก็ยังไม่พ้นหน้าจอฟ้า ๆ ที่ใช้ในการติดตั้ง และตรวจสอบสถานะต่าง ๆ แต่เนื่องด้วยการรองรับที่สมบูรณ์มากขึ้น การใช้งานก็จะมีประสิทธิภาพไม่แตกต่างจากการรันบนระบบปฎิบัติอื่น ๆ เหมาะกับการนำมาใช้เพื่อลดการบริโภคทรัพยากร ช่วยให้ใช้สมรรถนะของเครื่อง Server เต็มประสิทธิภาพ และเหมาะสำหรับการใช้งาน Application ที่แตกตัวเพิ่มได้ตามจำนวนการใช้งานที่เพิ่มขึ้น จุดเด่นที่สำคัญอีกจุดคือ Windows Nano Server สำหรับผู้อยากใช้งาน Windows Server Container Image ขนาดเล็ก ซึ่งจะเขียนในหัวข้อต่อ ๆ ไปครับ

    วิธีการติดตั้ง (Windows Server 2016)

    *Ref : https://docs.microsoft.com/th-th/virtualization/windowscontainers/quick-start/quick-start-windows-server

    • ทำการติดตั้ง OneGet PowerShell Module (ให้รันบน PowerShell ที่ Run As Administrator) 
    • เมื่อขึ้นถามว่าจะติดตั้งหรือไม่ .ให้กด Y ตามด้วย Enter
    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

    • จากนั้นใช้ OneGet ในการติดตั้ง Docker Version ล่าสุด
    • เมื่อขึ้นถามว่าจะติดตั้งหรือไม่ กด A ตามด้วย Enter
    Install-Package -Name docker -ProviderName DockerMsftProvider

    • จากนั้นทำการ Restart เครื่อง
    • หลังจาก Restart มาจะเห็นว่าสามารถใช้คำสั่ง Docker บน Powershell ได้แล้วดังนี้

    *หมายเหตุ : ในกรณีที่รันแล้ว error เกี่ยวกับ open //./pipe/docker_engine ให้เปิด firewall port 2375 ผ่าน powershell ที่รันด้วย administrator ดังนี้

    # Open firewall port 2375
    netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375
    
    # Configure Docker daemon to listen on both pipe and TCP (replaces docker --register-service invocation above)
    Stop-Service docker
    dockerd --unregister-service
    dockerd -H npipe:// -H 0.0.0.0:2375 --register-service
    Start-Service docker
    • สำหรับการติดตั้ง Image ต่าง ๆ ถ้าไม่ได้ทำ Image เองสามารถหาจาก Docker Hub ได้ โดยขอยกตัวอย่าง Image ที่เป็น .net core ที่รันอยู่บน Nano Server ดังนี้
    docker run microsoft/dotnet-samples:dotnetapp-nanoserver

    **Image ที่ทดสอบลงให้ดูไม่สามารถใช้ทำอะไรได้นะครับ สำหรับการใช้งานจริงก็จะประมาณสั่ง Run + Option ต่าง ๆ เพื่อบอกว่าให้ทำอะไร ซึ่งจะยกตัวอย่างใน Blog ถัด ๆ ไป อันนี้แค่ติดตั้ง Docker เพื่อใช้งานอย่างเดียวครับ

  • Powershell : นับหน้าเอกสาร PDF

    1. Download โปรแกรม PDFtk [ https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ]
    2. Install PDFtk
    3. ใช้ editor ซักตัวเขียน Code Powershell ที่ผมใช้คือใช้ Visual Studio 2013 และ Download PowerShell Tools for Visual Studio 2013 [ https://visualstudiogallery.msdn.microsoft.com/f65f845b-9430-4f72-a182-ae2a7b8999d7 ] ที่ใช้งานตัวนี้เพราะ Tools จะมี InteliSense ให้ไม่ต้องจำคำสั่ง PowerShell ทั้งหมด ก็ทำให้สะดวกดี
    4.  Code ก็ไม่มาก
      #กำหนดที่เก็บผลการ$File
      Path = ‘E:\tmp\result.txt’ -f $env:Path; 
      #เป้าหมาย diretory ที่เก็บ file PDF วนคำนาณแต่ละ file
      dir e:\ *.pdf | foreach-object{

      $pdf = pdftk.exe $_.FullName dump_data
      $NumberOfPages = 0
      $NumberOfPages = [regex]::match($pdf,’NumberOfPages: (\d+)’).Groups[1].Value

      $infoObj = New-Object PSObject -Property @{
      Name = $_.Name
      FullName = $_.FullName
      NumberOfPages = $NumberOfPages
      }
      #บันทึกข้อมูลลง file
      $infoObj.”FullName”,$infoObj.”NumberOfPages” -join ‘,’ | Out-File -FilePath $FilePath -Append -Width 200;

      }

      5. Save แล้วก็ Execute เพื่อทดสอบได้เลยครับ

  • วิธีการเขียน Script ตรวจสอบ Server Performance สำหรับเครื่อง Windows 2008 R2

    ขอนำเสนอ Powershell Script สำหรับใช้ Monitor Server Performance สำหรับเครื่อง Windows 2008 R2 ขึ้นไปดังนี้

    การติดตั้ง PowerShell Editor และ วิธีใช้งานบน Windows 2008

    1. ติดตั้งโดยไปที่

    Server Manager -> Features -> Add Features
    

    2. เลือกหัวข้อ

    Windows PowerShell Integrated Script Environment (ISE)
    

    3. ให้เลือกใช้งาน Version X86 ซึ่งเมื่อลงแล้ว Icon จะอยู่ที่

    Accessories -> Windows PowerShell -> Windows PowerShell ISE (x86)
    

    คำสั่งในการเปิด Execution Policy

    Set-ExecutionPolicyUnrestricted -Force
    

    การสร้าง Loop เพื่อให้สามารถรันได้ตลอดเวลา

    While($true){
        .....[Monitor Script].....
    }

    คำสั่งตรวจหา IP ของ Server

    Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.Description -eq "Intel(R) Dual Band Wireless-N 7260" } | ForEach-Object { $ipaddr = $_.IPAddress }
    $ip = $ipaddr[0]
    

    คำสั่งตรวจสอบ Max CPU Clock Speed

    Get-WmiObject-class win32_processor -Property  "maxclockspeed" | ForEach-Object {$clockspeed = $_.maxclockspeed }
    
    Get-WmiObject-class win32_computersystem -Property "NumberOfLogicalProcessors" | 
    
    ForEach-Object { $lprocessor = $_.NumberOfLogicalProcessors }
    
    $sumclockspeed = $clockspeed*$lprocessor
    

    คำสั่งตรวจสอบ Current CPU

    (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples | ForEach-Object {$cpuuse = $_.CookedValue}
    
        $cpuuse = [math]::round($cpuuse,0)
    
        $clockspeed = ($cpuuse*$sumclockspeed)/100
    
        $clockspeed = [math]::round($clockspeed,0)
    
        $pcpuuse = $clockspeed/$sumclockspeed
    
        $pcpuuse = [math]::round($pcpuuse,0)
    

    คำสั่งตรวจสอบ Maximum Memory

    
    $sumram = 0
    
    Get-WMIObject-class win32_physicalmemory -Property "Capacity"  | ForEach-Object { $sumram = $sumram + $_.Capacity}
    
    $sumram = $sumram/(1024*1024)
    

    คำสั่งตรวจสอบ Current Memory

    (Get-Counter "\Memory\Available MBytes").CounterSamples | ForEach-Object {$memfree = $_.CookedValue}
    
        $memuse = $sumram-$memfree;
    
        $pmemuse = ($memuse/$sumram)*100
    
        $pmemuse = [math]::round($pmemuse,0)
    

    คำสั่งตรวจสอบ Connection

     $netstat = "netstat -na"
    
     $netstatvalue = invoke-expression -command "$netstat" | where 
    
     {$_ -match "ESTABLISHED"}
    
     $port80 = [string]::join(":",($ip,"80"))
    
     $port443 = [string]::join(":",($ip,"443"))
    
    #Connection
    
    $conn = (invoke-expression -command "$netstat" | where {$_ -match "ESTABLISHED"} | Measure-Object -Line).Lines 
    
    #Unique IP
    
     if($netstatvalue){
    
         $uniqip = ($netstatvalue | where {$_ -match $port80 -or 
    
    $_ -match $port443 } | %{ $_.Split(' ',[StringSplitOptions]'RemoveEmptyEntries')[2] } | %{ $_.Split(':')[0] } | Sort-Object -Unique | Measure-Object -Line).Lines
    
     }else{
    
          $uniqip = 0
    
     }

    ตัวอย่างวิธีการ Display Stat บน Powershell Console

    cls
    
     Write-Host “              Token  : "$token
    
     Write-Host "              Server IP  : "$ip
    
     Write-Host "              TimeStamp  : "$timestamp    

    อาจจะยังไม่ได้อธิบายวิธีการทำ Service Process หรือในส่วนของการตั้ง Task Manager เพื่อทำระบบ Check อัตโนมัติ ไว้ว่าง ๆ เดี๋ยวค่อยมาเขียนต่อให้ครับ

  • ใช้ Powershell แบบ Linux Shell Script

    รวบรวมการทำงานกับ Powershell บน Windows โดยเทียบเคียงกับการใช้ ShellScript บน Linux
    (ทะยอยเขียนบันทึก โปรดติดตามเรื่อยๆ)

    • เลือกบางบรรทัดจากไฟล์ที่มีคำที่ต้องการอยู่
      shellscript: grep someword textfile.txt
      powershell: select-string “someword” textfile.txt
    • เลือกบางบรรทัดจากไฟล์ แล้วแยกด้วยเครื่องหมาย : เพื่อเอาฟิลด์ที่ 3
      shellscript: grep someword textfile.txt | awk -f ‘{FS=”:”}{print $3}’
      powershell: select string “someword” textfile.txt | % { $_.line.split(‘:’)[2];  }
    • เลือกบางบรรทัดจากไฟล์ แล้วเอาลงไฟล์
      shellscript: grep someword textfile.txt  > output.txt
      powershell: select string “someword” textfile.txt | foreach-object {$_.line} > output.txt
    • ดูท้ายไฟล์ตลอดเวลา (ไม่รู้จะใช้คำว่าอะไรดี) และเริ่มดูโดยเอา 3 บรรทัดสุดท้าย ไม่ใช่เริ่มทั้งไฟลฺ์
      shellscript: tail -f mydata.log
      powershell: get-content mydata.log -wait -tail 3