none
1台のPCに複数のプリンタポートを作成したい RRS feed

  • 質問


  • いつも参考にさせていただいています。

    業務PC(Windows7 x32)にプリンタポート(Standerd TCP/IP Port)を追加します。
    (プリンタドライバについては別途考慮)
    業務PCは200台程度存在しており、各PCに複数の新プリンタが追加されます。

    グループポリシーや、ツール等で配布はできません。
    PC一台づつ作業します。

    下記info.txtを元に、powershellを利用して、GUIを使用することなく
    プリンタポートを追加したいと考えています。
    最終的にはバッチ化します。

    まずはPC1台に対して1プリンタポートです。
    [info.txt]
    computername,printername,printerip
    PC001,PR100,10.10.10.101
    PC002,PR200,10.10.10.102
    PC003,PR300,10.10.10.103
    PC004,PR100,10.10.10.101
    PC005,PR200,10.10.10.102
    PC006,PR400,10.10.10.104
    .
    .
    .

    下記スクリプトにて実現させました。
    (もっと簡単にできるよ、ってありましたら是非お願いします)
    [portadd.ps1]

    $Cscript  = "cscript /Nologo C:\Windows\System32\Printing_Admin_Scripts\ja-JP\prnport.vbs"
    $Hostname   = $Env:ComputerName
    $PrintIP    = Select-String -Path .\info.txt -Pattern $Hostname | ForEach-Object { $($_ -Split",")[2]}
    $PortAdd = "$Cscript -a -r $PrintIP -h $PrintIP -o raw"
    Invoke-Expression $PortAdd

    さて、本題ですが、下記info2.txtのように
    1台のPCに複数のプリンタポートを追加するようなパターンが存在する場合です。

    [info.txt]
    computername,printername1,printerip1,printername2,printerip2,.,.
    PC001,PR100,10.10.10.101
    PC002,PR200,10.10.10.102
    PC003,PR300,10.10.10.103,PR100,10.10.10.101
    PC004,PR100,10.10.10.101,PR200,10.10.10.102
    PC005,PR200,10.10.10.102,PR400,10.10.10.104
    PC006,PR400,10.10.10.104,PR100,10.10.10.101
    .
    .
    .

    よい方法がありましたら、ご教授お願いいたします。


    2015年4月14日 8:16

回答

  • 単にポートの数だけprnport.vbsを複数回実行すれば良いと思うのですが、そのやり方についてお聞きになりたいということでしょうか?

    あと、info.txtはヘッダがきちんと定義されたCSV形式と考えていいのでしょうか。でしたらImport-Csvコマンドレットを使うと楽かもしれません。

    なお、prnport.vbsの中身ではWMIのWin32_TCPIPPrinterPort クラスを呼んでいるので、PowerShellから直接このクラスのオブジェクトを作ってやってもいいかもしれません。(Windows8/2012ではそれすら必要なく、Add-PrinterPortというコマンドレットを使えば一発だったりしますが)

    • 回答としてマーク sumutaro 2015年4月20日 0:33
    2015年4月14日 11:37
    モデレータ

すべての返信

  • 単にポートの数だけprnport.vbsを複数回実行すれば良いと思うのですが、そのやり方についてお聞きになりたいということでしょうか?

    あと、info.txtはヘッダがきちんと定義されたCSV形式と考えていいのでしょうか。でしたらImport-Csvコマンドレットを使うと楽かもしれません。

    なお、prnport.vbsの中身ではWMIのWin32_TCPIPPrinterPort クラスを呼んでいるので、PowerShellから直接このクラスのオブジェクトを作ってやってもいいかもしれません。(Windows8/2012ではそれすら必要なく、Add-PrinterPortというコマンドレットを使えば一発だったりしますが)

    • 回答としてマーク sumutaro 2015年4月20日 0:33
    2015年4月14日 11:37
    モデレータ
  • 牟田口様

    返信遅くなりましたが、
    info.txtはヘッダが定義されていますので、Import-Csvを使ってみました。
    確かに楽ですね。
    Add-PrinterPortですが、今回のPCはWindows7なので、今後の参考にさせていただきます。

    info.txtを下記の様、ポート追加がない部分は「Null」に変更して、

    [info.txt]
    computername,printername1,printerip1,printername2,printerip2
    PC001,PR100,10.10.10.101,Null,Null
    PC002,PR200,10.10.10.102,Null,Null
    PC003,PR300,10.10.10.103,PR100,10.10.10.101
    PC004,PR100,10.10.10.101,PR200,10.10.10.102
    PC005,PR200,10.10.10.102,PR400,10.10.10.104
    PC006,PR400,10.10.10.104,PR100,10.10.10.101


    最終的に下記の様にしてみました。
    なんとかいけそうです。
    有難うございました。

    $Hostname   = $Env:ComputerName
    $PrintIP1   = Import-Csv .\info.txt | where computername -eq $Hostname | select printerip1
    $PrintIP2   = Import-Csv .\info.txt | where computername -eq $Hostname | select printerip2
    
    if($PrintIP1.printerip1 -eq "Null"){
    Write-host " プリンタポート1なし"
    }else{
    cscript /Nologo C:\Windows\System32\Printing_Admin_Scripts\ja-JP\prnport.vbs -a -r $PrintIP1.printerip1 -h $PrintIP1.printerip1 -o raw
    }
    
    if($PrintIP2.printerip2 -eq "Null"){
    Write-host " プリンタポート2なし"
    }else{
    cscript /Nologo C:\Windows\System32\Printing_Admin_Scripts\ja-JP\prnport.vbs -a -r $PrintIP2.printerip2 -h $PrintIP2.printerip2 -o raw
    }
    

    2015年4月20日 0:32