Sample code for 30+ languages & platforms
PowerShell

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

Gets information about the smart card currently inserted in the reader (or USB token).

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$scmd = New-Object Chilkat.ScMinidriver

# Reader names (smart card readers or USB tokens) can be discovered
# via PCSC List Readers or PCSC Find Smart Cards
$readerName = "Alcor Micro USB Smart Card Reader 0"
$success = $scmd.AcquireContext($readerName)
if ($success -eq $false) {
    $($scmd.LastErrorText)
    exit
}

$json = New-Object Chilkat.JsonObject
$json.EmitCompact = $false

$success = $scmd.GetCardProperties($json)
if ($success -eq $false) {
    $($scmd.LastErrorText)
    exit
}

$($json.Emit())

# Here is sample output:
# See below for sample code to parse the JSON.
# 
# NOTE: Not all smart cards support all properties.
# The GetCardProperties method will return information for all properties supported by the card.

# {
#   "bytesAvailable": 74752,
#   "containersAvailable": 18,
#   "maxKeyContainers": 20,
#   "capabilities": {
#     "fCertificateCompression": false,
#     "fKeyGen": true
#   },
#   "keySizes": {
#     "minimumBitlen": 2048,
#     "defaultBitlen": 2048,
#     "maximumBitlen": 4096,
#     "incrementalBitlen": 1024
#   },
#   "readOnly": false,
#   "cacheMode": "global",
#   "supportsWinX509Enrollment": true,
#   "guid": "1201803d-03e6-772a-3d80-0112e6032a77",
#   "serial": "e6032a773d800112e6032a77",
#   "pins": [
#     "user",
#     "admin",
#     "role3",
#     "role4"
#   ],
#   "pin": {
#     "user": {
#       "type": "regular",
#       "purpose": "primaryCard",
#       "changePermission": [
#         "user"
#       ],
#       "unblockPermission": [
#         "admin"
#       ],
#       "cachePolicy": "normal",
#       "policyInfo": "00000000",
#       "flags": "00000000",
#       "acceptPlainTextPin": true,
#       "generateSessionPin": false
#     },
#     "admin": {
#       "type": "challenge/response",
#       "purpose": "administrator",
#       "changePermission": [
#         "admin"
#       ],
#       "cachePolicy": "normal",
#       "policyInfo": "00000000",
#       "flags": "00000000"
#     },
#     "role3": {
#       "type": "regular",
#       "purpose": "digitalSignature",
#       "changePermission": [
#         "role3"
#       ],
#       "unblockPermission": [
#         "role4"
#       ],
#       "cachePolicy": "alwaysPrompt",
#       "policyInfo": "00000000",
#       "flags": "00000000",
#       "acceptPlainTextPin": true,
#       "generateSessionPin": false
#     },
#     "role4": {
#       "type": "regular",
#       "purpose": "unblockOnly",
#       "changePermission": [
#         "role4"
#       ],
#       "cachePolicy": "normal",
#       "policyInfo": "00000000",
#       "flags": "00000000",
#       "acceptPlainTextPin": true,
#       "generateSessionPin": false
#     }
#   },
#   "importSupport": [
#     "plainText",
#     "rsaKeyest",
#     "eccKeyest",
#     "symmetric"
#   ],
#   "algorithms": [
#     "AES"
#   ],
#   "paddingSchemes": [
#     "block",
#     "pkcs1",
#     "pss",
#     "oaep"
#   ],
#   "chainingModes": [
#     "ChainingModeCBC"
#   ]
# }

# Use this online tool to generate parsing code from sample JSON: 
# Generate Parsing Code from JSON

$bytesAvailable = $json.IntOf("bytesAvailable")
$containersAvailable = $json.IntOf("containersAvailable")
$maxKeyContainers = $json.IntOf("maxKeyContainers")
$capabilitiesFCertificateCompression = $json.BoolOf("capabilities.fCertificateCompression")
$capabilitiesFKeyGen = $json.BoolOf("capabilities.fKeyGen")
$keySizesMinimumBitlen = $json.IntOf("keySizes.minimumBitlen")
$keySizesDefaultBitlen = $json.IntOf("keySizes.defaultBitlen")
$keySizesMaximumBitlen = $json.IntOf("keySizes.maximumBitlen")
$keySizesIncrementalBitlen = $json.IntOf("keySizes.incrementalBitlen")
$readOnly = $json.BoolOf("readOnly")
$cacheMode = $json.StringOf("cacheMode")
$supportsWinX509Enrollment = $json.BoolOf("supportsWinX509Enrollment")
$guid = $json.StringOf("guid")
$serial = $json.StringOf("serial")
$pinUserType = $json.StringOf("pin.user.type")
$pinUserPurpose = $json.StringOf("pin.user.purpose")
$pinUserCachePolicy = $json.StringOf("pin.user.cachePolicy")
$pinUserPolicyInfo = $json.StringOf("pin.user.policyInfo")
$pinUserFlags = $json.StringOf("pin.user.flags")
$pinUserAcceptPlainTextPin = $json.BoolOf("pin.user.acceptPlainTextPin")
$pinUserGenerateSessionPin = $json.BoolOf("pin.user.generateSessionPin")
$pinAdminType = $json.StringOf("pin.admin.type")
$pinAdminPurpose = $json.StringOf("pin.admin.purpose")
$pinAdminCachePolicy = $json.StringOf("pin.admin.cachePolicy")
$pinAdminPolicyInfo = $json.StringOf("pin.admin.policyInfo")
$pinAdminFlags = $json.StringOf("pin.admin.flags")
$pinRole3Type = $json.StringOf("pin.role3.type")
$pinRole3Purpose = $json.StringOf("pin.role3.purpose")
$pinRole3CachePolicy = $json.StringOf("pin.role3.cachePolicy")
$pinRole3PolicyInfo = $json.StringOf("pin.role3.policyInfo")
$pinRole3Flags = $json.StringOf("pin.role3.flags")
$pinRole3AcceptPlainTextPin = $json.BoolOf("pin.role3.acceptPlainTextPin")
$pinRole3GenerateSessionPin = $json.BoolOf("pin.role3.generateSessionPin")
$pinRole4Type = $json.StringOf("pin.role4.type")
$pinRole4Purpose = $json.StringOf("pin.role4.purpose")
$pinRole4CachePolicy = $json.StringOf("pin.role4.cachePolicy")
$pinRole4PolicyInfo = $json.StringOf("pin.role4.policyInfo")
$pinRole4Flags = $json.StringOf("pin.role4.flags")
$pinRole4AcceptPlainTextPin = $json.BoolOf("pin.role4.acceptPlainTextPin")
$pinRole4GenerateSessionPin = $json.BoolOf("pin.role4.generateSessionPin")
$i = 0
$count_i = $json.SizeOfArray("pins")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pins[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.user.changePermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.user.changePermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.user.unblockPermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.user.unblockPermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.admin.changePermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.admin.changePermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.role3.changePermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.role3.changePermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.role3.unblockPermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.role3.unblockPermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("pin.role4.changePermission")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("pin.role4.changePermission[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("importSupport")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("importSupport[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("algorithms")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("algorithms[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("paddingSchemes")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("paddingSchemes[i]")
    $i = $i + 1
}

$i = 0
$count_i = $json.SizeOfArray("chainingModes")
while ($i -lt $count_i) {
    $json.I = $i
    $strVal = $json.StringOf("chainingModes[i]")
    $i = $i + 1
}

# Delete the context when finished with the card.
$success = $scmd.DeleteContext()
if ($success -eq $false) {
    $($scmd.LastErrorText)
}