Saya memiliki kode untuk menggunakan PowerShell untuk mengekspor kebijakan pengontrol domain menggunakan Get-GPOReport. Namun, saya tidak pernah dapat menggunakan findstr pada file HTML yang diekspor ini. Satu-satunya cara kerjanya adalah jika saya mengubah ekstensi file HTML menjadi .txt, lalu menyalin semua konten di dalamnya ke file .txt lain yang baru dibuat (misalnya test.txt).

Hanya dengan begitu, fungsi findstr berfungsi. Adakah yang tahu mengapa itu tidak berfungsi pada file asli?

import os, subprocess

subprocess.Popen(["powershell","Get-GPOReport -Name 'Default Domain Controllers Policy' -ReportType HTML -Path 'D:\Downloads\Project\GPOReport.html'"],stdout=subprocess.PIPE)

policyCheck = subprocess.check_output([power_shell,"-Command", 'findstr /c:"Minimum password age"', "D:\Downloads\Project\GPOReport.html"]).decode('utf-8')

print(policyCheck)


# However if I copy all the content in D:\Downloads\Project\GPOReport.html to a newly created test.txt file (MANUALLY - I've tried to do it programmatically, findstr wouldn't work too) under the same directory and use:

power_shell = os.path.join(os.environ["SYSTEMROOT"], "System32","WindowsPowerShell", "v1.0", "powershell.exe")

policyCheck = subprocess.check_output([power_shell,"-Command", 'findstr /c:"Minimum password age"', "D:\Downloads\Project\test.txt"]).decode('utf-8')

print(policyCheck)

# Correct Output Will Show

Apa yang saya dapatkan:

subprocess.CalledProcessError: Command '['C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', '-Command', 'findstr /c:"Minimum password age"', 'D:\Downloads\Project\GPOReport.html']' returned non-zero exit status 1.

Keluaran yang diharapkan:

<tr><td>Minimum password age</td><td>1 days</td></tr>
1
Xteriz 30 Juni 2020, 17:21

1 menjawab

Jawaban Terbaik

Saya bukan orang Python, tapi saya pikir ini mungkin masalah penyandian. Berdasarkan fakta bahwa findstr tidak kompatibel dengan Unicode. Seperti yang disarankan @iRon Select-String harus melakukan trik meskipun Anda mungkin harus merujuk properti .Line untuk mendapatkan hasil yang diharapkan yang Anda sebutkan. Jika tidak, itu akan mengembalikan objek yang cocok.

Saya akan menyerahkannya kepada Anda untuk mentranspos ini ke dalam kode Python, tetapi perintah Select-String akan terlihat seperti:

(Select-String -Path "D:\Downloads\Project\GPOReport.html" -Pattern "Minimum password age" -SimpleMatch).Line

Jika ada beberapa kecocokan, ini akan mengembalikan array string; garis di mana pertandingan dibuat. Beri tahu saya jika itu membantu.

0
Steven 30 Juni 2020, 19:21