Category Archive windows

Byphunsanit

windows: ลงโปรแกรมหลายเครื่อง

ถ้าต้องลงโปรแกรมเหมือน ๆ กันหลาย ๆ เครื่อง หรือตามไปอัพเดตโปรแกรมทุกเครื่องให้เป็นตัวล่าสุด จะดีมั๋ยถ้าจะลดเวลาที่ต้องใช้ลงไป ใช้สคริปท์ง่าย ๆ หมือนฝั่่ง Linux ที่ใช้ไฟล์เดียวก็ลงโปรแกรมที่ต้องใช้ได้ครบ

ก่อนอื่นโปรแกรมตัวนี้ชื่อ Chocolatey ไม่ต้องไปดาวน์โหลดมาก่อน วิธีติดตั้งมีทั้งแบบใช้คนเดียวและแบบองค์กรขนาดใหญ่ เพื่ออธิบายง่าย ๆ และที่ใช้ตอนนี้ไม่ได้มีเครื่องที่ต้องลงโปรแกรมมาก ขอใช้แบบลงส่วนตัวละกัน

  1. เปิด PowerShell ขึ้นมาโดนสิทธิ administrator copy
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(‘https://community.chocolatey.org/install.ps1’))
    ไปวางแล้ว enter ก็ลงโปรแกรมติดตั้งเสร็จแล้ว
  2. ต่อไปคือสร้างลิสต์โปรแกรมที่จะติดตั้งลงเครื่องอื่น ๆ ขึ้นมาเพื่อความสดวกจะติดตัว Chocolatey Gui ( ทำแค่เครื่องของเราเครื่องเดียวก็พอ ) พิมพ์ choco install chocolateygui ใน PowerShell แลัว enter
    1. เปิดโปรแกรม Chocolatey GUI จากเมนูของ windows โดยสิทธิ administrator จะเห็นว่าซ้ายมือจะมีอยู่ 2 เมนูคือ
      • This PC คือรายชื่อโปรแกรมที่ติดตั้งในเครื่องเรา
      • chocolatey จะเป็นหน้าที่ไว้ค้นหาโปรแกรมที่จะติดตั้ง ต้องการจะติดตั้งโปรแกรมอะไรก็ค้นหาเอาจากหน้านี้ คลิกขวา install มันจะดาวน์โหลดโปรแกรมและติดตั้งให้เอง
    2. เมื่อลง program ที่ต้องการครบแล้วไปที่ This PC มุมขวาบนจะมีปุ่ม Export ให้เซฟไฟล์ไว้ใน flash drive จะเป็นไฟล์ Chocolatey.config
  3. ไปที่เครื่องที่จะติดตั้งโปรแกรมเพิ่มเปิด PowerShell ขึ้นมาโดนสิทธิ administrator และลง Chocolatey เหมือนขั้นตอนที่ 1
  4. ติดตั้งโปรแกรมในลิสต์โดยใช้ choco install <path-to-exported-file> เช่น choco install “E:\Chocolatey.config” โปรแกรมจะถูกติดตั้งเพิ่มตามที่มีอยู่ในลิสต์ที่ได้ทำไว้
  5. เวลาผ่านไปโปรแกรมที่ลงไว้เริ่มเก่าแล้วก็สั่งอัพเดตโดยใช้ choco upgrade all -y ถ้าจะ upgrade บางโปรแกรมหรือจะยกเว้นบางโปรแกรมก็ทำตามคู่มือ https://docs.chocolatey.org/en-us/choco/commands/upgrade

ถ้าไม่เข้าใจลองดูวิธีได้จากคู่มือ https://docs.chocolatey.org/en-us/chocolatey-gui/user-interface/main-window/actions/export ตัวสคริปต์ที่มันใช้เป็นไฟล์ง่าย ๆ อย่างที่ผมใช้คือ

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="avastfreeantivirus" version="21.6.6446.0" />
  <package id="chocolatey-core.extension" version="1.3.5.1" />
  <package id="chocolatey-dotnetfx.extension" version="1.0.1" />
  <package id="chocolatey-visualstudio.extension" version="1.9.0" />
  <package id="chocolatey-windowsupdate.extension" version="1.0.4" />
  <package id="chocolatey" version="0.10.15" />
  <package id="chocolateygui" version="0.18.1" />
  <package id="dotnetfx" version="4.8.0.20190930" />
  <package id="filezilla" version="3.55.1" />
  <package id="Firefox" version="91.0" />
  <package id="gimp" version="2.10.24.3" />
  <package id="GoogleChrome" version="92.0.4515.131" />
  <package id="googledrive" version="2.34.5075.1619" />
  <package id="greenshot" version="1.2.10.6" />
  <package id="keepass.install" version="2.48.1" />
  <package id="microsoft-teams" version="1.4.00.19572" />
  <package id="microsoft-windows-terminal" version="1.9.1942.0" />
  <package id="notepadplusplus.install" version="8.1.2" />
  <package id="postman" version="8.9.1" />
  <package id="sourcetree" version="3.4.1" />
  <package id="visualstudio-installer" version="2.0.1" />
  <package id="vlc" version="3.0.16" />
  <package id="winmerge" version="2.16.12" />
</packages>

จะลองแก้เองเพื่อที่จะใช้กับ user หลาย ๆ กลุ่มก็ได้ครับ กลุ่มนี้เพิ่มบรรทัดนี้ อีกกลุ่มลงอีกโปรแกรมก็แค่ copy ไปอีกไฟล์ แล้วเพิ่มลดรายชื่อโปรแกรมเอา

Byphunsanit

Windows: install error 0x800f0954

ถ้าลงโปรแกรมเก่า ๆ บางครั้งจะเจอ error 0x800f0954 ซึ่งสาเหตุคือ เราไปลงโปรแกรมที่เก่ากว่า version ปัจจุบัน อย่าง Poor Man’s T-SQL Formatter จะใช้ .net2 ที่เก่ามากหลายปีแล้ว ทำให้เจอ error code 0x800f0954

ก่อนอื่นโหลดตัวติดตั้ง .net 2 มาก่อน แต่เพราะว่ามันเก่ามากจนไม่สามารถหาตัวติดตั้งจาก microsoft ได้ ดังนั้นจะโหลดตัวติดตั้ง .Net 3.5 จาก Microsoft .NET Framework 3.5 ที่จะมี .NET Framework 2.0 และ .NET Framework 3.0 service pack ในตัวแทน

การเตรียมการติดตั้ง

  1. เปิดโปรแกรม regedit โดยไปที่เมนูของ windows พิมพ์ regedit.exe ในช่อง run หรือ search แล้ว enter
  2. เปิดคีย์ตามลำดับ HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  3. ดูที่ด้านขวาจะมี value ชื่อ UseWUServer เซ็ตค่าเป็น 0
  4. ปิด regedit
  5. restart windows หรือ restart service Windows Update

Cr. Error Code 0x800F0954 on Windows 10

Byphunsanit

windows: เอาพยากรณ์อากาศออกไป

หลัง update windows มันมีอะไรแปลกๆ เพิ่มขึ้นมาอย่างหนึ่ง คือพยากรณ์อากาศตรง task bar คิดว่าคนที่ต้องการจะดูมันตลอดทั้งวันนี้คงมีน้อยมากๆ เอาออกไปเหอะ

  1. คลิก task bar
  2. ไปที่ News and interests
  3. คลิก turn off
Byphunsanit

แก้เข้า linux / windows แล้วเวลาเปลี่ยน

ถ้าเครื่องลง dual boot หลังไปใช้ linux แล้วกลับมาบูทเข้า windows จะพบว่าเวลามันจะเปลี่ยนไปหลายชั่วโมง โดยที่ไม่ได้ตั้งเวลาใหม่แต่อย่างใด ทั้ง ๆ ที่ตอนใช้ลินุกซ์เวลาก็ถูกต้องนะ

ปัญหาแบบนี้สามารถแก้ได้ง่าย ๆ โดยพิมพ์ใน terminal ด้วยสิทธิ์ root

timedatectl set-local-rtc 1

จากนั้นปัญหานี้จะหมดไปละ

สาเหตุ ในคอมพิวเตอร์มีนาฬิกาอยู่ 2 ตัว คือ 1 นาฬิกาบนแมนบอร์ด ( bios / cmos / uefi ) 2 นาฬิกาบนระบบปฏิบัติการ โดยค่าตั้งต้น linux จะคิดว่านาฬิกาบนเมนบอร์จะเป็นเวลาตาม UTC ไม่ใช่เวลาท้องถิ่น แต่วินโดวน์จะคิดว่าเป็นเวลาท้องถิ่น เวลาที่เราใช้ linux หรือ windows ต่างก็ sync เวลาใหม่ลงไปที่นาฬิกาบนแมนบอร์ด แต่เพราะว่าทั้งสองตัวเข้าใจว่าเป็นจึงเห็นเวลาเปลี่ยนไป เปลี่ยนมา

ขอบคุณวิธีและคำอธิบายจาก Wrong Time Displayed in Windows-Linux Dual Boot Setup? Here’s How to Fix it

Byphunsanit

Remote Desktop: สองจอ

วิธี remote desktop ไปที่เครื่องอื่นให้ใช้ได้พร้อมกัน 2 จอจะได้ทำงาน work from home ได้สะดวกๆ

  1. เปิดโปรแกรม remote desktop
  2. คลิก Show Options
  3. คลิกเท็ป Display
  4. ติ๊ก use all my monitors for the remote session
  5. ลอง remote ตามปกติ

จะเห็นว่าสามารถใช้งานได้พร้อมกันทั้งสองจอแล้ว

Byphunsanit

เซ็ต SSL เร็วและฟรีใน 5 นาที

ตั้งแต่ google ใช้ SSL ออกมาเป็นเงื่อนไขในการทำ SEO ทำให้ทุกเว็บต้องมาเปิดใช้ SSL ไม่งั้นอันดับจะตกลง

สามารถขอ SSL ฟรีได้ง่ายๆ โดยใช้บริการของ http://Let’s Encrypt’s เปิดให้ใช้ฟรีหรือจะบริจาคเล็กน้อยตามศรัทธาก็ได้ การติดตั้งง่ายๆ โดย

  • Web Hosting who support Let’s Encrypt จะเป็น host ที่ support อยู่แล้วสามารถเปิดใช้ได้เลยอย่าง hostgator.com
  • ใช้ certbot instructions เลือกว่าใช้ Apache, Haproxy, Nginx, Plesk และ os ที่ใช้อย่าง Arch Linux, CentOS 6, Debian, Fedora, FreeBSD, Gentoo, macOS, OpenBSD 6.0+, openSUSE, RHEL, Ubuntu, Windows มันจะบอกวิธิติดตั้งมาให้ภายใน 5 นาทีเว็บก็ใช้ SSL ได้เลยทุก domain !!!

อย่าง server ผมก็ทำแค่ SSH เข้าไปที่ host แล้วพิมพ์ตาม

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
sudo certbot certonly --apache

แล้วทดลองเรียกเว็บโดยใช้ SSL เท่านั้นเอง ง่ายจริงๆ

Byphunsanit

แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

เป็นเรื่องปกติที่เน็ตใน office ใหญ่ๆ มันจะอยู่หลัง proxy ที่จะกรองข้อมูลเข้าออก แต่แปลกคือเปิดเว็บใน chrome firefox IE ได้หมด แต่ตัว command line dos ตัวน้อยๆ น่ารัก ที่ติดมากับ windows มีปัญหาไม่สามารถติดตั้ง package ต่างๆ ผ่าน composer หรือ npm ได้

เพราะว่าสำนักงานอาจจะใช้ NTLM หรือ Kerberos มาทำเป็น proxy โดยไม่ได้สนใจว่า dos, command line แม้แต่น้องใหม่ powershell อะไรพวกนี้มันต่อเน็ตไม่ได้ 100% ทั้ง ๆ ที่ ping ออกไปได้ เอา url ไปเปิดดูก็ได้ แต่ทั้ง composer ทั้ง npm มันบอกว่าต่อเน็ตไม่ได้ network เค้าก็บอกไม่ได้บล๊อกนะ ทำไม่เป็นแบบนี้ไม่รู้เหมือนกัน

วิธีแก้คือหาโปรแกรม authentication proxy, forward proxy, reverse Proxy มาช่วย เดิมเคยใช้ Cntlm Authentication Proxy โดนเคยเขียน forward proxy ด้วย cntlm ไว้แต่พี่แกแทบจะไม่พัฒนาต่อแล้ว เลยเปลี่ยนมาใช้ Px แทน

การติดตั้ง

  1. สร้าง folder ไว้เก็บโปรแกรม เช่น C:\px
  2. โหลดมาจากหน้า https://github.com/genotrance/px/releases/tag/vHEAD จะมีตัวที่เป็น .exe ให้โหลดมาเก็บไว้ที่ C:\px
  3. เปิด command line แล้ว
    1. cd c:/
    2. cd c:\px
    3. ถ้า proxy ของ office คือ 192.168.1.33 port 3128 ก็พิมพ์
      px –192.168.1.33:3128 –save
    4. px –install
  4. เปิดไฟล์ C:\px\px.ini ตามคู่มือ Configuration ออกมาแก้ เช่น
[proxy]
allow = *.*.*.*
auth =
gateway = 0
hostonly = 0
listen = 127.0.0.1
noproxy = 192.168.1.*
pac =
port = 3129
server = 192.168.1.33:3128
useragent =
username =

[settings]
foreground = 0
idle = 30
log = 0
proxyreload = 60
socktimeout = 20.0
threads = 5
workers = 8

แก้ windows environment สมมุติว่า 3128 คือ port ที่ตั้งไว้ใน [proxy] จะได้

VariableValue
HTTP_PORXYlocalhost:3129
HTTP_PROXY_REQUEST_FULLURI0
HTTPS_PROXYlocalhost:3129
HTTPS_PROXY_REQUEST_FULLURI0

ถ้าไม่เคยตั้งค่า Windows Environment Variables อ่านได้จาก

เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
แก้จาก

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

เป็น

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

restart แล้วลง composer และ npm ใหม่ ตัวติดตั้งเห็นเห็น Windows Environment Variables แล้วตั้งค่า proxy ให้เอง

Byphunsanit

forward proxy ด้วย cntlm

มีวิธีที่ดีกว่าตัวนี้ แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

ทำให้ command line มันสามารถออกไปอินเตอร์เน็ตได้หลัง proxy ntlm ขวางอยู่โดยใช้ cntlm ไม่ยากเลยแค่ทำตามวิธีง่ายๆ

  1. ก่อนอื่นก็ไปโหลด Cntlm Authentication Proxy
  2. ติดตั้งแล้วเปิดไฟล์ C:\Program Files (x86)\Cntlm\cntlm.ini แก้โดย
    Username

    ใส่ user ของ proxy ntlm ลงไปเช่น pitt.p

    Domain

    domain ที่ใช้ login windows ก่อน username นั่นละ

    Password

    password ที่ใช้ login windows

    Proxy

    คือ proxy ที่ใช้เข้าเน็ตที่เซ้ตไว้ใน windows ถ้าไม่รู้ก็ดูจาก How to Configure a Proxy Server on Windows บางครั้งอาจจำต้องดูจากไฟล์ .pac อีกทีว่าบรรทัด ที่มีคำว่า “proxy ” มันชี้ไปที่ไหน
  3. เซ็ต environment variables ตามวิธี How to set the path and environment variables in Windows ถ้าเซ้ตไม่ได้ มีอีกวิธี แก้ / เพิ่ม windows environment variables registry โดยกำหนด http_proxy และ https_proxy ให้มีค่าเท่ากับ 127.0.0.1:3128
  4. restart และลองใช้ command อย่าง เช็คเน็ตตัวย curl ดูว่าใช้ได้มั๋ย

เพื่อความมันใจอาจจะแก้ password ที่เก็บเป็น plain text password ให้มันปลอดภัยขึ้นโดยการเข้าระหัสมันซะก็ทำตามวิธี Using CNTLM to enable NTLMv2 authentication for any application

จริงๆ แล้วมี ntlm proxy forwarder อีกหลายตัว บางตัว update บ่อยกว่าตัว cntlm มาก เช่น px หรือ NTLM Authorization Proxy Server แต่ผมไม่เคยใช้ อาจจะดีกว่า อันนี้ต้องลองดูครับ

อ่านเพิ่มเติม

Byphunsanit

set Environment โดย command line

เราสามารถเซ็ต Environment Variables ได้โดยใช้ command line ง่ายๆ แค่พิมพ์ set หรือ setx เท่านั้นเอง

ก่อนอื่นก็ดูก่อนว่า Environment Variable ตัวนี้เซ็ตเอาไว้รึยัง รูปแบบคือ echo %{variable name}% ตัวอย่าง echo %path% ถ้ามีค่าจะได้ค่าออกมา ถ้าไม่เคยมีมาก่อนจะ retuen %{variable name}% กลับมา

ใน windows จะไม่สนใจตัวเล็กตัวใหญ่ (case insensitive) ดังนั้นตัวแปรที่เซ็ตชื่อ PATH หรือ path ก็คือตัวเดียวกัน

ถ้าใช้ windows 10 build ใหม่ๆ สามารถใช้ คำสั่ง setx รูปแบบคือ setx {variable name} {variable name} เช่น setx http_proxy 127.0.0.1:3128 หรือ setx https_proxy 127.0.0.1:3128

ถ้า windows ที่เก่ากว่านั้นก็ใช้ set เช่น set http_proxy=”127.0.0.1:3128″ หรือ set https_proxy=”127.0.0.1:3128″ ต่างกันที่ มี x กับ ไม่มี x แค่นั้นเหรอ จริงๆแล้ว set ใช้ง่ายกว่ามากโดย

  • จริงๆ ไม่ต้องมี ” ก็ได้นะ จะใช้ set http_proxy=127.0.0.1:3128 หรือ set https_proxy=127.0.0.1:3128 ก็ได้ ถ้าไม่มีพวกสเปส อักษรพิเศษอยู่ข้างใน
  • เพิ่มค่าเข้าไปได้ง่ายๆ อย่างตัวแปร PATH ที่ใครๆ โปรแกรมไหนๆก็อย่างเข้าไปอยู่ข้างใน แค่ใช้ SET PATH=%PATH%;c:\whatever\else แค่นี้ก็เพิ่มเข้าไปต่อจากตัวเดิมแล้ว
  • เอา Environment Variables ออกไปได้ง่ายๆ แค่ไม่ใส่ค่าลงไป set https_proxy แค่นี้ก็ลบออกไปได้แล้ว

อ่านเพิ่มเติม

Byphunsanit

เช็คเน็ตตัวย curl

อ่านหัวข้อแล้วอาจจะงงทำไม่ไม่เปิดกับ browser ละง่ายจะตาย ความจริงคือ composer มันไม่สามารถติดตั้งอะไรได้เลย แม้แต่ตัวมันเอง แต่สามารถใช้ command ping ได้ปกติ คนทำ proxy ก็บอกของเค้าปกติ เลยต้องใช้ curl มาเปิดเว็บดู

ทดลองโดยใช้

curl -v http://pitt.plusmagi.com

ที่นี้เห็นชัดเลยว่า มันไม่ผ่าน authen ของ proxy ทั้งๆ ที่เปิดเว็บเข้าไปดูอะไรต่ออะไรได้ปกตินั่นละ url เดียวกัน port เดียวกัน แต่ดึงข้อมูลกับ command กลับไม่ได้ ไม่เอา ผล ให้ดูนะเดี๋ยวชื่อ server เค้าจะหลุดออกมาข้างนอก แต่มันบอกตรงตัวเลยว่า ติด authen ที่ ntlm proxy มันนี่ละไม่ต้องหาอื่นไกล ทดลองอีกทีโดยใช้

Curl -x { proxy name / proxy ip }:{ port } --proxy-user { domain name ตอน login windows }\{ username }: password -L http://pitt.plusmagi.com

username, password และ domain ก็ตัวที่ใช้ออกเน็ตนี่ละ ดูจากผล command line ออกเน็ตผ่าน proxy ได้แล้วละ

เจอสาเหตุแล้วที่นี้เรามาแก้ให้ออกเน็ตกับ command line ได้กัน forward proxy ด้วย cntlm