残念なことに我が社の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
PS> Get-Item Env:PROCESSOR_ARCHITECTURE
Name Value
---- -----
PROCESSOR_ARCHITECTURE AMD64
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のプリンタードライバー
をインストールするようになっている。
# プリンタドライバーインストール関数
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"
}
- PowerShellでプリンターをインストール(概要)
- PowerShellでプリンタードライバーをインストール
- PowerShellでプリンターポートの作成
- PowerShellでプリンターの作成
- Powershellでプリンタードライバーをインストール x86_x64共用版 <- イマココ
##終わりに
PowerShellとWMIObjectのスクリプトは、
昔のコマンドプロンプトやvbsのファイルより読みやすい。
さらに、PowerShellはリモート実行が可能である。
Invoke-Command を使い複数のPCに一気にプリンターを
インストールといったこともできる。
PowerShellユーザーが少しでも増えてくれることを望んでおります。
##参考文献
ENVを確認する方法
Environment Variables