【解決方法】Python、バッチ ファイル、タスク スケジューラ

プログラミングQA

[ad_1]

こんにちは!

以下のスクリプトがあります。 基本的に、特定のディレクトリ内のファイルをループして印刷し、別のディレクトリに移動します。

このスクリプトを実行する .bat ファイルがあり、手動で実行すると必要なとおりに動作します。

ただし、.bat ファイルを実行するようにタスク スケジューラを設定すると、実際の印刷を除き、必要に応じてスクリプトが実行されます。 デフォルトのプリンターを設定し、ファイルを移動し、最後にプリンターを別のデフォルトに設定します。

ユーザー アカウントをネットワーク管理者に設定しました。このアカウントにはクライアント コンピューターのローカル管理者権限があります。 スケジュールでは、最高の権限が有効になっています。

何をチェックすべきかについてのアイデアは大歓迎です!!

Python
import os
import time
import shutil
import win32print

# Insert the directory path in here
path = r'\\tsl-files\Share\Posting Journal\Queue'
auditpath = r'\\tsl-files\Share\Posting Journal\Log'
# Extracting all the contents in the directory corresponding to path
l_files = os.listdir(path)

# Iterating over all the files
for file in l_files:

# Instantiating the path of the file
	file_path = f'{path}\\{file}'
	win32print.SetDefaultPrinterW("Lanier mp 4055")

	# Checking whether the given file is a directory or not
	if os.path.isfile(file_path):
		try:
			# Printing the file pertaining to file_path
			os.startfile(file_path, 'print')
			print(f'Printing {file}')
			

			# Sleeping the program for 5 seconds so as to account the
	# steady processing of the print operation.
			time.sleep(10)
			shutil.move(f'{path}\\{file}', f'{auditpath}\\{file}')
		except:
			# Catching if any error occurs and alerting the user
			print(f'ALERT: {file} could not be printed! Please check\
			the associated softwares, or the file type.')
	else:
		print(f'ALERT: {file} is not a file, so can not be printed!')
win32print.SetDefaultPrinterW("Generic / Text Only")		
print('Task finished!')

私が試したこと:

スクリプトで指定されたファイルの場所はネットワークの場所であるため、スクリプトを複製し、C ドライブ上のフォルダーから直接実行するように新しいタスク スケジューラを設定しました。 まったく同じことを行います。 おそらく、bat ファイルがネットワーク上の場所で開かれているため、代わりにその場所から PDF Adob​​e Reader を起動しようとしているのではないかと考えていました。 しかし、前述したようにローカルで試してみると、それが間違いであることが判明しました。

他に何をテストすればよいかわかりません。 アイデアは大歓迎です!!

Python 3.12.0
Windows 10 プロ

解決策 1

NetworkService (「ネットワーク管理者」アカウントなどというものはありません) がプリンターにアクセスできるかどうかは思い出せませんが、アクセスできないと思います。

タスクを実行する目的で通常のユーザー アカウントを作成し、必要に応じてファイル システムへのアクセス許可を付与すると、そのアカウントがプリンターにアクセスできるようになります。 代わりにこのアカウントを使用するようにタスクを設定します。 アカウントの「パスワードの有効期限が切れる」を忘れずにオフにしてください。

NetworkService は最小限のアクセス許可があり、パスワードがないマシン アカウントであるため、どうしても必要な場合を除き、使用しないでください。

[ad_2]

コメント

タイトルとURLをコピーしました