วันพุธที่ 22 กรกฎาคม พ.ศ. 2558

การดู Windows Product Key ในเครื่องตัวเอง โดยใช้ VBscript

อย่างแรก ตรวจสอบด้วย Script
slmgr.vbs /dli
หรือ
slmgr.vbs /dlv

เพื่อเช็ครหัส 4 ตัวท้ายของคุณเป็นรหัสอะไร ตรงหัวข้อ Partial Product Key

แต่ทั้งนี้ คำสั่งนี้ เราจะไม่ได้ รหัสทั้งหมด
เราต้องสร้าง VBscript ขึ้นมาเอง ซึ่งจากที่ค้นพบ และเทสกับ Windows 7 และ 8.1 จะมีอยู่สอบแบบ ซึ่งอาจจะต้องลองว่าแบบไหน รหัส 4 ตัวท้าย ตรงกับที่เราเช็คกับ slmgr ครับ

วิธีการคือ Copy code ไปใส่ใน Text file แล้ว save as เป็นนามสกุล .vbs ก็สามารถดับเบิลคลิกเพื่อดูได้เลยครับ

อันแรก อันนี้ ผมเทสกับ Windows 8.1 Retail ตรงคับ แต่กับ Windows 7 ไม่ตรง
   
Option Explicit



Dim objshell,path,DigitalID, Result

Set objshell = CreateObject("WScript.Shell")

'Set registry key path

Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"

'Registry key value

DigitalID = objshell.RegRead(Path & "DigitalProductId")

Dim ProductName,ProductID,ProductKey,ProductData

'Get ProductName, ProductID, ProductKey

ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")

ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")

ProductKey = "Installed Key: " & ConvertToKey(DigitalID)

ProductData = ProductName  & vbNewLine & ProductID  & vbNewLine & ProductKey

'Show messbox if save to a file

If vbYes = MsgBox(ProductData  & vblf & vblf & "Save to a file?", vbYesNo + vbQuestion, "BackUp Windows Key Information") then

   Save ProductData

End If







'Convert binary to chars

Function ConvertToKey(Key)

    Const KeyOffset = 52

    Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert

    'Check if OS is Windows 8

    isWin8 = (Key(66) \ 6) And 1

    Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)

    i = 24

    Maps = "BCDFGHJKMPQRTVWXY2346789"

    Do

        Current= 0

        j = 14

        Do

           Current = Current* 256

           Current = Key(j + KeyOffset) + Current

           Key(j + KeyOffset) = (Current \ 24)

           Current=Current Mod 24

            j = j -1

        Loop While j >= 0

        i = i -1

        KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput

        Last = Current

    Loop While i >= 0

    keypart1 = Mid(KeyOutput, 2, Last)

    insert = "N"

    KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)

    If Last = 0 Then KeyOutput = insert & KeyOutput

    ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)

  

  

End Function

'Save data to a file

Function Save(Data)

    Dim fso, fName, txt,objshell,UserName

    Set objshell = CreateObject("wscript.shell")

    'Get current user name

    UserName = objshell.ExpandEnvironmentStrings("%UserName%")

    'Create a text file on desktop

    fName = "C:\Users\" & UserName & "\Desktop\WindowsKeyInfo.txt"

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set txt = fso.CreateTextFile(fName)

    txt.Writeline Data

    txt.Close

End Function


ของ Windows 7 ผมใช้อันนี้ ตรงคับ แต่จะใช้กับ Windows 8.1 ไม่ตรง
Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

ลองดูครับ

วันพฤหัสบดีที่ 2 กรกฎาคม พ.ศ. 2558

การ Export Import Oracle Database 10g ด้วย Data Pump

ในกรณีนี้ เป็นการ Export Data ออกจาก User หนึ่ง ไปยังอีก User หนึ่ง ซึ่งปัญหาที่พบคือ มีการ Export Import ก่อนหน้าแล้ว ด้วย Exp และ Imp แต่ คำสั่ง Imp นั้น จะไม่สามารถ Overwrite ตารางเก่าได้ หากมีการสร้างไว้แล้ว  ซึ่ง Data Pump สามารถ ทำได้ ซึ่งเป็นคำสั่งใหม่ใน Oracle Version 10g ขึ้นไป

ตัวอย่างการ Export ด้วย Datapump

set NLS_LANG=English
expdp userid=[username]/[password]@[servicename] SCHEMAS=[schema name] dumpfile=[dumpfile name].dmp logfile=[log file name].log

เช่น username และ พาส คือ u กับ p  มี service name ชื่อ mydatabase schemas เดิมชื่อ old1 จะได้ดังนี้

expdp userid=u/p@mydatabase SCHEMAS=old1 dumpfile=dumpdata.dmp logfile=dumpdata.log

จะ Export ไปชื่อไฟล์ dumpdata.dmp และมี log file dumpdata.log

this command for Export to dmp file and store in default folder.

ตัวอย่างการ Import ด้วย Datapump
set NLS_LANG=English
impdp [username]/[password]@[instance] dumpfile=[dumpfile name].dmp logfile=[log file name].log REMAP_SCHEMA=[old schema name]:[new schema name]  table_exists_action=[options for table exists]

ตัวอย่าง
impdp u/p@mydatabase dumpfile=dumpdata.dmp logfile=importdumpdata.log REMAP_SCHEMA=old1:new1  table_exists_action=replace

ในที่นี้คือ นำเข้าไฟล์ โดยบันทึก log การนำเข้าในชื่อ importdumpdata.log และเปลี่ยน schema จาก old1 เป็น new1 ถ้า มี ตารางอยู่แล้ว ให้ทำการ drop และ นำเข้าไปใหม่

สำหรับ option ของ table_exists_action มีดังนี้
TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE}


รายละเอียดต่าง ๆ สามารถดูเพิ่มเติมได้ที่ 
ref:http://docs.oracle.com/cd/B13789_01/server.101/b10825/dp_import.htm
ref:https://oracle-base.com/articles/10g/oracle-data-pump-10g