LoginSignup
8

More than 5 years have passed since last update.

Powershellでプリンタードライバーをインストール x86_x64共用版

Last updated at Posted at 2015-06-25

残念なことに我が社のPCのOSは32bitと64bitがある。
両方で正常に動くプリンターインストールのスクリプトが必要だ。

プリンターの追加とポートの追加のスクリプトは32bit、64bit関係なく動く。

プリンタードライバーだけが、
32bitと64bitで別なので、
32bitOSか64bitOSかを自動的に判別して
該当するドライバーをインストールするスクリプトを作り出せばいい。

32bitか64bitかを判別するスクリプト

Windows10 Pro では、
Win32_OparatingSystemのOSArchitectureをGet-WmiObjectで呼び出せなくなった。
代わりに環境変数で判別することにする。

実際にPowershellの画面で下記のコードを試してみましょう。

環境変数で判別
Get-Item Env:PROCESSOR_ARCHITECTURE
64bitの場合
PS> Get-Item Env:PROCESSOR_ARCHITECTURE
Name                           Value
----                           -----
PROCESSOR_ARCHITECTURE         AMD64

32bitの場合
PS> Get-Item Env:PROCESSOR_ARCHITECTURE

Name                           Value
----                           -----
PROCESSOR_ARCHITECTURE         x86

32bitと64bitを切り分けるとなると
if文で下記のようになるでしょう。

判別
$arch=Get-Item Env:PROCESSOR_ARCHITECTURE
if($arch.Value -match "x86"){
  echo "32bit"
}else{
  echo "64bit"
}
実行結果
PS> $arch=Get-Item Env:PROCESSOR_ARCHITECTURE
>> if($arch.Value -match "x86"){
>>   echo "32bit"
>> }else{
>>   echo "64bit"
>> }

64bit

PS> 

ソースコード

32bitか64bitかの判別のソースと、プリンタードライバーインストールのソースを
組み合わせると下記のようになる。

少し高度にドライバーをインストールする関数を作って、

  • 32bitの場合は32bitのプリンタードライバー
  • 64bitの場合は64bitのプリンタードライバー

をインストールするようになっている。

install-driver.ps1
# プリンタドライバーインストール関数
function install-driver{
    Param($Name="Canon LBP8720/8710 LIPSLX",$SupportPlatform="Windows NT x86",$Version="3",$DriverPath,$InfName)
    $PrinterDriverList=New-Object System.Management.ManagementClass("Win32_PrinterDriver")
    $PrinterDriver=$PrinterDriverList.CreateInstance()
    # プリンタードライバー名
    $PrinterDriver.Name=$Name
    # WIndows x64か Windows NT x86か
    $PrinterDriver.SupportedPlatform=$SupportPlatform
    # version 3 意味は win2k
    $PrinterDriver.Version=$Version
    # ドライバーのフォルダ
    $PrinterDriver.DriverPath=$DriverPath
    # INFファイルのあるパス
    $PrinterDriver.InfName=$InfName

    $PrinterDriverList.AddPrinterDriver($PrinterDriver)
    # Putするのに管理者権限が必要
    $PrinterDriverList.Put()
}

# 32bit or 64bit判別
$arch=Get-Item Env:PROCESSOR_ARCHITECTURE

if($arch.Value -match "x86"){
    echo "32bitです"
    install-driver `
        -SupportPlatform "Windows NT x86" `
        -DriverPath "Z:\Printer_Driver\Drivers\x86\Canon\new\LIPSLX\Driver" `
        -InfName "Z:\Printer_Driver\Drivers\x86\Canon\new\LIPSLX\Driver\CNLB0J.INF"
}else{
    echo "64bitです"
    install-driver `
        -SupportPlatform "Windows x64" `
        -DriverPath "Z:\Printer_Driver\Drivers\x64\Canon\new\LIPSLX\x64\Driver" `
        -InfName "Z:\Printer_Driver\Drivers\x64\Canon\new\LIPSLX\x64\Driver\CNLB0JA64.INF"
}

  1. PowerShellでプリンターをインストール(概要)
  2. PowerShellでプリンタードライバーをインストール
  3. PowerShellでプリンターポートの作成
  4. PowerShellでプリンターの作成
  5. Powershellでプリンタードライバーをインストール x86_x64共用版 <- イマココ

終わりに

PowerShellとWMIObjectのスクリプトは、
昔のコマンドプロンプトやvbsのファイルより読みやすい。

さらに、PowerShellはリモート実行が可能である。
Invoke-Command を使い複数のPCに一気にプリンターを
インストールといったこともできる。

PowerShellユーザーが少しでも増えてくれることを望んでおります。

参考文献

ENVを確認する方法
Environment Variables

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8