עזרה בהורדה ב PowerShell
-
@yossiz אמר בעזרה בהורדה ב PowerShell:
נסה Invoke-WebRequest https://www.google.com בנטפרי
לא מופיע לי שגיאה.
PS C:\Users\XXXXX> Invoke-WebRequest https://www.google.com StatusCode : 200 StatusDescription : OK Content : <!doctype html><html dir="rtl" itemscope="" itemtype="http://schema.org/WebPage" lang="iw"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/goog... RawContent : HTTP/1.1 200 OK X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Date: Tue, 26 May 2020 12:16:31 GMT Expires: -1 P3P: CP=... Forms : {f} Headers : {[X-XSS-Protection, 0], [X-Frame-Options, SAMEORIGIN], [Cache-Control, private, max-age=0], [Content-Type, text/html; charset=UTF-8]...} Images : {@{innerHTML=; innerText=; outerHTML=<IMG id=hplogo style="PADDING-BOTTOM: 14px; PADDING-TOP: 28px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px" alt=Google src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" width=272 height=92>; outerText=; tagName=IMG; id=hplogo; style=PADDING-BOTTOM: 14px; PADDING-TOP: 28px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; alt=Google; src=/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png; width=272; height=92}, @{innerHTML=; innerText=; outerHTML=<IMG id=tsuid1 style="CURSOR: pointer; POSITION: absolute; LEFT: 5px; Z-INDEX: 300; TOP: 4px" alt="" src="/textinputassistant/tia.png" width=27 height=23 data-script-url="/textinputassistant/11/iw_tia.js">; outerText=; tagName=IMG; id=tsuid1; style=CURSOR: pointer; POSITION: absolute; LEFT: 5px; Z-INDEX: 300; TOP: 4px; alt=; src=/textinputassistant/tia.png; width=27; height=23; data-script-url=/textinputassistant/11/iw_tia.js}} InputFields : {@{innerHTML=; innerText=; outerHTML=<INPUT type=hidden value=iw name=hl>; outerText=; tagName=INPUT; type=hidden; value=iw; name=hl}, @{innerHTML=; innerText=; outerHTML=<INPUT type=hidden value=hp name=source>; outerText=; tagName=INPUT; type=hidden; value=hp; name=source}, @{innerHTML=; innerText=; outerHTML=<INPUT type=hidden name=biw>; outerText=; tagName=INPUT; type=hidden; name=biw}, @{innerHTML=; innerText=; outerHTML=<INPUT type=hidden name=bih>; outerText=; tagName=INPUT; type=hidden; name=bih}...} Links : {@{innerHTML=<SPAN class=gbtb2></SPAN><SPAN class=gbts>חיפוש</SPAN>; innerText=חיפוש; outerHTML=<A onclick=gbar.logger.il(1,{t:1}); id=gb_1 class="gbzt gbz0l gbp1" href="https://www.google.co.il/webhp?tab=ww"><SPAN class=gbtb2></SPAN><SPAN class=gbts>חיפוש</SPAN></A>; outerText=חיפוש; tagName=A; onclick=gbar.logger.il(1,{t:1});; id=gb_1; class=gbzt gbz0l gbp1; href=https://www.google.co.il/webhp?tab=ww}, @{innerHTML=<SPAN class=gbtb2></SPAN><SPAN class=gbts>חיפוש תמונות</SPAN>; innerText=חיפוש תמונות; outerHTML=<A onclick=gbar.logger.il(1,{t:2}); id=gb_2 class=gbzt href="https://www.google.co.il/imghp?hl=iw&tab=wi"><SPAN class=gbtb2></SPAN><SPAN class=gbts>חיפוש תמונות</SPAN></A>; outerText=חיפוש תמונות; tagName=A; onclick=gbar.logger.il(1,{t:2});; id=gb_2; class=gbzt; href=https://www.google.co.il/imghp?hl=iw&tab=wi}, @{innerHTML=<SPAN class=gbtb2></SPAN><SPAN class=gbts>מפות</SPAN>; innerText=מפות; outerHTML=<A onclick=gbar.logger.il(1,{t:8}); id=gb_8 class=gbzt href="https://maps.google.co.il/maps?hl=iw&tab=wl"><SPAN class=gbtb2></SPAN><SPAN class=gbts>מפות</SPAN></A>; outerText=מפות; tagName=A; onclick=gbar.logger.il(1,{t:8});; id=gb_8; class=gbzt; href=https://maps.google.co.il/maps?hl=iw&tab=wl}, @{innerHTML=<SPAN class=gbtb2></SPAN><SPAN class=gbts>YouTube</SPAN>; innerText=YouTube; outerHTML=<A onclick=gbar.logger.il(1,{t:36}); id=gb_36 class=gbzt href="https://www.youtube.com/?gl=IL&tab=w1"><SPAN class=gbtb2></SPAN><SPAN class=gbts>YouTube</SPAN></A>; outerText=YouTube; tagName=A; onclick=gbar.logger.il(1,{t:36});; id=gb_36; class=gbzt; href=https://www.youtube.com/?gl=IL&tab=w1}...} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 48899
-
במיקום של השמירה אני משתמש בכמה משתנים וניסיתי לעשות עם פס תחתון והוא זיהה רק את המשתנה השני, ולכן השתמשתי עם רווח.
-OutFile "$saveFolder\$book\$book_$page.webp"
איך אפשר להשתמש בשניהם יחד?
.
אגב המשתנה page הוא מספר רץ אצלי, ואם אני ישתמש איתו גם למה שכתבת כנראה זה לא יעבוד.
$page = Invoke-WebRequest $url -OutFile "$saveFolder\$book\$book $page.webp" -passThru
-
@yits אמר בעזרה בהורדה ב PowerShell:
אגב המשתנה page הוא מספר רץ אצלי, ואם אני ישתמש איתו גם למה שכתבת כנראה זה לא יעבוד.
נכון, לא שמתי לב שאתה כבר משתמש במשתנה בשם
$page
. תן לו שם אחר.במיקום של השמירה אני משתמש בכמה משתנים וניסיתי לעשות עם פס תחתון והוא זיהה רק את המשתנה השני, ולכן השתמשתי עם רווח.
-OutFile "$saveFolder$book$book_$page.webp"
איך אפשר להשתמש בשניהם יחד?
זה קורה מסיבה מובנת, כי כאשר powershell נתקל בתו הדולר
$
באמצע מחרוזת הוא מתייחס לכל הבא אחריו כחלק משם המשתנה, עד שהוא מגיע לתו שהוא לא חוקי באמצע משתנה. מכיון שתו_
הוא תו חוקי במשתנה, powershell לא יכול לדעת שהוא לא חלק משם המשתנה.
יש כמה פתרונות, מתוכם-OutFile "$saveFolder\$book\$($book)_$page.webp" -OutFile ("$saveFolder\$book\$book" + "_$page.webp")
-
@dovid
הפתרון שהבאת לא עובד,
הוא יודע לומר אם הגודל הוא 0 או לא,
אבל לא ניתן לייצא אותו אח"כ לקובץ.זה מה שניסיתי
$saveFolder = ($pwd).path $book = 602285 $page = 0 md 602285 $url = "http://mefo.otzar.org/api/books/$book/$page/image" $Responsepage = Invoke-WebRequest $url if ($Responsepage.RawContentLength -ne 0) {Out-File -FilePath "$saveFolder\$book\$book $page.webp" -InputObject $Responsepage.RawContent} else {break }
-
@yits "אבל לא ניתן לייצא אותו אח"כ לקובץ"
קורה משהו? מנין לך שהבדיקה עובדת?
אגב אני כעת רואה שRawContentLength מחזיר את הגודל של התוכן + הכותרות וממילא זה לא הכי מתאים.
כמו"כ הRawContent מכיל כותרות יש לשנות אותו לContet.
כל זה בלי קשר לבעיה שאתה אומר שזה לא עובד.. -
@yossiz אמר בעזרה בהורדה ב PowerShell:
@yits אמר בעזרה בהורדה ב PowerShell:
אבל במקרה שיש תוכן אני לא מצליח לשמור את הנתונים.
אבל אתה לא מתאר איך ה"לא מצליח" הזה מתממש? יש שגיאה? הקובץ נוצר ריק? הקובץ לא נוצר?
נוצר קובץ לא תקין.
-
הממ.. זה בעייתי...
https://stackoverflow.com/questions/24708859 -
@yits זה נראה קצת בעייתי להעביר את המידע של
Invoke-WebRequest
אם זה מידע בינארי כי זה מומר ל-string,
נראה לי שהכי קל להשתמש בקוד שלי ולכתוב תנאי אחרי ההורדה שאם ה-contentLength הוא 0 למחוק את הקובץ ולהפסיק את הלולאה.
משהו כזה:$ResponsePage = Invoke-WebRequest $url -OutFile "$saveFolder\$book\$book $page.webp" -passThru if ($Responsepage.RawContentLength -eq 0) { rm "$saveFolder\$book\$book $page.webp" break }
-
מה זה הסיפור הזה שלח תשובה ריקה? זה לא הכי נורמלי.
זה מחזיר OK כלומר 200? יש מצב לכתובת דוגמה כזו?כשהכרתי את PowerShell אז התלהבתי שאוכל לעשות בקלות קודים לפעולות קטנות במחשב כיוצא באלו,
אבל איבדתי את ההתלהבות ברגע שגיליתי את LinqPad שמאפשר להריץ בקלות C#.
השפה והשימוש בסקריפטים של powershell או בש (וק"ו batch) ממש קשים לי. -
@dovid אמר בעזרה בהורדה ב PowerShell:
מה זה הסיפור הזה שלח תשובה ריקה? זה לא הכי נורמלי.
זה מחזיר OK כלומר 200? יש מצב לכתובת דוגמה כזו?(אני עונה במקום @yits כי אני יודע באיזה אתר מדובר)
כן, זה מחזיר 200... זה באמת לא הכי נורמלי, אבל מה לעשות... ¯/_(ツ)_\¯