WMI は実行できますが、問題が発生します。PC はオンになっていますが、ログオフになっています。実行しようとすると、次のようになります。
wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
「一般的なエラー」というメッセージが表示されて失敗します。RDP でログインし、自分の側から同じコマンドを実行すると、動作します。使用している Powershell のバージョンは古いため、一部のプリンター コマンドレットが含まれておらず、PS の更新は現在不可能です。実際に RDP でログインしなくても、リモートでログインする方法はありますか? PS、cmd、PSEXEC などを介して?
私が採用した他の方法は、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 は動作していますが、値を設定しようとすると失敗します。RDPformat-list -property drivername
経由でログインしてからスクリプトを実行すると、正常に更新されることを確認しました。もちろん、RDP でログインしたくはありません。念のため、PC で PSRemoting を有効にしたので、invoke-command
次に試してみます。
答え1
誰かをリモートでログインさせる方法はありますか?
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 コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- psexec- リモート マシンでコマンド ライン プロセスを実行します。リモート マシンでコマンド ライン プロセスを実行します。