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
を試してみます。
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