web-dev-qa-db-ja.com

PS、cmd、vbsなどのスクリプトを使用して、Win7でプリンタードライバーの更新(プリンター設定)とプリンター設定を自動化する際の問題はありますか?

WMIで実行できますが、問題があります。PCはオンになっていますが、ログオフしています。実行しようとすると:

wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"

「一般的な障害」に関するメッセージで失敗します。 RDPを実行してから、同じコマンドを自分の側から実行すると、機能します。私が使用しているPowershellのバージョンは古いため、一部のプリンターコマンドレットがなく、PSの更新は現在問題外です。実際にRDPでログインしなくても、誰かをリモートでログインする方法はありますか? PS、cmd、PSEXECなどを介して?

私が取ったもう1つの方法は、regeditを使用することですが、それでいくつかの問題にぶつかっています。つまり、何をコピーすればよいかわからないということです。 regeditで、両面印刷とトレイ2を有効にするドライバー名と設定(プリンター設定)を変更できますが、両面印刷と長辺に沿って印刷するためのプリンター設定の設定を変更する方法がわかりません。

何を変更するかを理解するために行ったことは、regeditでプリンター名をデータ値として検索し、設定を変更する前にキーをエクスポートしたことです。次に、設定を変更した後、再度エクスポートしました。次に、fc /c /a /u before.reg after.regを使用して変更を取得しました。変更された値のみが含まれるように.regを切り刻みました。 .regを実行するとすべてが変わるようですが、長いエッジ設定に沿って両面を印刷します。これはlexmarkプリンターなので、好みが他の場所に保存されているのではないかと思います。

私の会社は最近セキュリティポリシーを変更し、30分間操作がないと、PCがログオフしました。これらのドライバーの変更は、PCがログオフされていない通常の時間帯には実行できません。そのため、現在のところ、RDPを実行し、PCごとに手動で実行することで夜間に実行されています。 RDPにログインせずに、リモートで誰かにログインする方法を考えてもかまわないので、WMIはその魔法を実行できます。

Powershellだけを使用して試してみました。

$Str = Read-Host "Please select a store number [###] "
$PC = Read-Host "Please select a PC number [##] "

$PCNm = "0$Str-CCPC-$PC"

$lp1 = Get-WMIObject -ComputerName $PCNm -Query "SELECT * from Win32_Printer Where DeviceID='lp1'"
$lp1.DriverName = "Lexmark Universal v2"
$lp1.Put()

誰もPCにログオンしていない場合、一般的な障害でそこでも失敗します。 WMIにプロパティを照会できるため、WMIは機能していますが、値を設定しようとすると失敗します。 RDP経由でログインし、スクリプトを実行すると、format-list -property drivernameで正常に更新されたことを確認しました。明らかに、私はRDPをまったく使用したくありません。念のため、PCでPSRemotingを有効にしたので、次にinvoke-commandを試してみます。

3
user3377627

リモートで誰かにログインする方法はありますか?

psexecを使用して、特定のユーザーとしてリモートコマンドを実行できます。

psexec \\computer -u user -p psswd [options] command [arguments]

次のコマンドを試してください。

psexec \\computer -u user -p psswd wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"

ノート:

  • @run_fileオプション(指定されたテキストファイルにリストされているすべてのコンピューターでコマンドを実行する)も確認することをお勧めします。
  • 現在のドメイン内のすべてのコンピューターに対して実行するには、\\*の代わりに\\computerを入力します

構文

psexec \\computer[,computer[,..] [options] command [arguments]

psexec @run_file [options] command [arguments]

オプション:

computer   The computer on which psexec will run command.
           Default = local system 
           To run against all computers in the current domain enter "\\*"
@run_file  Run command on every computer listed in the text file specified.

command    Name of the program to execute

.。

-p psswd   Specify a password for user (optional). 
           Passed as clear text.
           If omitted, you will be prompted to enter a hidden password.

-u user    Specify a user name for login to remote computer(optional).

ソース psexec


参考文献

  • Windows CMDコマンドラインのA-Zインデックス -Windowsコマンドラインに関連するすべてのものの優れたリファレンス。
  • psexec -リモートマシンでコマンドラインプロセスを実行します。リモートマシンでコマンドラインプロセスを実行します。
1
DavidPostill