ניווט

    תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    • מקצועות
    חוקי הפורום

    עזרה בהורדה ב PowerShell

    תוכנה
    3
    22
    51
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגב כנושא
    התחבר בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • Y
      yits נערך לאחרונה על ידי yits

      אני מוריד קבצים דרך PS ואני רוצה לדעת מה אורך הקובץ Content-Length: לפני שאני מבצע שמירה,
      או אחרי השמירה, מכיוון שאני רוצה לצאת מהלולאה מיד כשזה מגיע לקבצים ללא תוכן.

      זה הפקודה שאני מריץ

      Invoke-WebRequest $url -OutFile "$saveFolder\$book\$book $page.webp"
      
      yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • yossiz
        yossiz @yits נערך לאחרונה על ידי

        @yits

        $page = Invoke-WebRequest $url -OutFile "$saveFolder\$book\$book $page.webp" -passThru
        

        עכשיו המשתנה $page מכיל את התשובה, ובשדה RawContentLength יש לך האורך.

        תגובה 1 תגובה אחרונה תגובה ציטוט 2
        • dovid
          dovid נערך לאחרונה על ידי

          @yossiz חסך בתשובה שלו, אני מרחיב אותה לתשובה מלאה

          $page = Invoke-WebRequest $url 
          if ($page.RawContentLength  -ne 0)
          {
              Out-File -FilePath "$saveFolder\$book\$book $page.webp" -InputObject $page.RawContent 
          }
          

          אפשר מן הסתם לעשות פילטר בשורה אחת (אני לא יודע) אבל אולי זה שימושי לך תנאי ללוג.

          Y 2 תגובות תגובה אחרונה תגובה ציטוט 2
          • yossiz
            yossiz נערך לאחרונה על ידי yossiz

            @dovid למדתי היום משהו מצמרר,
            שבברירת מחדל Invoke-WebRequest עושה פרסור של הדף כולל JS 😨
            על ידי מנוע IE 😨😨
            ומציג תיבת דו-שיח גרפי כאשר יש שגיאת JS 😨😨😨

            נסה Invoke-WebRequest https://www.google.com בנטפרי

            ecf3dcfa-361f-44c7-8ab7-c05f327e4172-image.png

            Y תגובה 1 תגובה אחרונה תגובה ציטוט 1
            • Y
              yits @dovid נערך לאחרונה על ידי

              @yossiz
              זה עובד מצוין אבל הוא שומר קודם את הקובץ הריק למחשב.
              מה ש @dovid כתב זה יותר ארוך אבל לא שומר בכלל קבצים ריקים.

              תודה רבה.

              תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • Y
                yits @yossiz נערך לאחרונה על ידי

                @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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;tab=w1}...}
                ParsedHtml        : mshtml.HTMLDocumentClass
                RawContentLength  : 48899
                
                
                
                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • Y
                  yits נערך לאחרונה על ידי yits

                  במיקום של השמירה אני משתמש בכמה משתנים וניסיתי לעשות עם פס תחתון והוא זיהה רק את המשתנה השני, ולכן השתמשתי עם רווח.

                  -OutFile "$saveFolder\$book\$book_$page.webp"
                  

                  איך אפשר להשתמש בשניהם יחד?

                  .

                  אגב המשתנה page הוא מספר רץ אצלי, ואם אני ישתמש איתו גם למה שכתבת כנראה זה לא יעבוד.

                  $page = Invoke-WebRequest $url -OutFile "$saveFolder\$book\$book $page.webp" -passThru
                  
                  
                  yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • dovid
                    dovid נערך לאחרונה על ידי

                    @yossiz זה מאפיין בפני עצמו ParsedHtml, לא ככה?

                    yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 1
                    • yossiz
                      yossiz @yits נערך לאחרונה על ידי yossiz

                      @yits אמר בעזרה בהורדה ב PowerShell:

                      אגב המשתנה page הוא מספר רץ אצלי, ואם אני ישתמש איתו גם למה שכתבת כנראה זה לא יעבוד.

                      נכון, לא שמתי לב שאתה כבר משתמש במשתנה בשם ‎$page. תן לו שם אחר.

                      במיקום של השמירה אני משתמש בכמה משתנים וניסיתי לעשות עם פס תחתון והוא זיהה רק את המשתנה השני, ולכן השתמשתי עם רווח.

                      -OutFile "$saveFolder$book$book_$page.webp"

                      איך אפשר להשתמש בשניהם יחד?

                      זה קורה מסיבה מובנת, כי כאשר powershell נתקל בתו הדולר $ באמצע מחרוזת הוא מתייחס לכל הבא אחריו כחלק משם המשתנה, עד שהוא מגיע לתו שהוא לא חוקי באמצע משתנה. מכיון שתו _ הוא תו חוקי במשתנה, powershell לא יכול לדעת שהוא לא חלק משם המשתנה.
                      יש כמה פתרונות, מתוכם

                      -OutFile "$saveFolder\$book\$($book)_$page.webp"
                      -OutFile ("$saveFolder\$book\$book" + "_$page.webp")
                      
                      תגובה 1 תגובה אחרונה תגובה ציטוט 2
                      • yossiz
                        yossiz @dovid נערך לאחרונה על ידי

                        @dovid אמר בעזרה בהורדה ב PowerShell:

                        @yossiz זה מאפיין בפני עצמו ParsedHtml, לא ככה?

                        כן, לא הכרתי. גישה לאחד מתוך כמה מאפיינים באובייקט המוחזר מריץ את ה-JS של הדף. (כמו כן הדפסה לקונסול מריץ את ה-JS כי זה ניגש למאפיינים אלו)

                        תגובה 1 תגובה אחרונה תגובה ציטוט 1
                        • Y
                          yits @dovid נערך לאחרונה על ידי

                          @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 }
                          
                          dovid תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • dovid
                            dovid @yits נערך לאחרונה על ידי

                            @yits "אבל לא ניתן לייצא אותו אח"כ לקובץ"
                            קורה משהו? מנין לך שהבדיקה עובדת?
                            אגב אני כעת רואה שRawContentLength מחזיר את הגודל של התוכן + הכותרות וממילא זה לא הכי מתאים.
                            כמו"כ הRawContent מכיל כותרות יש לשנות אותו לContet.
                            כל זה בלי קשר לבעיה שאתה אומר שזה לא עובד..

                            תגובה 1 תגובה אחרונה תגובה ציטוט 2
                            • Y
                              yits נערך לאחרונה על ידי yits

                              @dovid אמר בעזרה בהורדה ב PowerShell:

                              אני עושה את זה בתוך לולאה, ואם הקובץ ריק הוא יוצא מהלולאה,
                              אבל במקרה שיש תוכן אני לא מצליח לשמור את הנתונים.

                              גם עם Content זה לא עובד.

                              yossiz dovid 2 תגובות תגובה אחרונה תגובה ציטוט 0
                              • yossiz
                                yossiz @yits נערך לאחרונה על ידי yossiz

                                @yits אמר בעזרה בהורדה ב PowerShell:

                                אבל במקרה שיש תוכן אני לא מצליח לשמור את הנתונים.

                                אבל אתה לא מתאר איך ה"לא מצליח" הזה מתממש? יש שגיאה? הקובץ נוצר ריק? הקובץ לא נוצר?

                                Y תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                • Y
                                  yits @yossiz נערך לאחרונה על ידי

                                  @yossiz אמר בעזרה בהורדה ב PowerShell:

                                  @yits אמר בעזרה בהורדה ב PowerShell:

                                  אבל במקרה שיש תוכן אני לא מצליח לשמור את הנתונים.

                                  אבל אתה לא מתאר איך ה"לא מצליח" הזה מתממש? יש שגיאה? הקובץ נוצר ריק? הקובץ לא נוצר?

                                  נוצר קובץ לא תקין.

                                  dovid תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • dovid
                                    dovid @yits נערך לאחרונה על ידי dovid

                                    @yits סוף סוף אתה כותב משהו, לא מתאים לאיש עם ידע טכני כמוך להגיד "לא עובד" כזה סתמי!
                                    תשנה את ה$Responsepage.RawContent ל$Responsepage.Content.

                                    תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                    • dovid
                                      dovid @yits נערך לאחרונה על ידי

                                      @yits אמר בעזרה בהורדה ב PowerShell:

                                      גם עם Content זה לא עובד.

                                      סליחה, החמצתי.
                                      אם ככה אני לא יודע.

                                      תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                      • yossiz
                                        yossiz נערך לאחרונה על ידי

                                        הממ.. זה בעייתי...
                                        https://stackoverflow.com/questions/24708859

                                        תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                        • yossiz
                                          yossiz נערך לאחרונה על ידי yossiz

                                          @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
                                          }
                                          
                                          תגובה 1 תגובה אחרונה תגובה ציטוט 3
                                          • dovid
                                            dovid נערך לאחרונה על ידי

                                            מה זה הסיפור הזה שלח תשובה ריקה? זה לא הכי נורמלי.
                                            זה מחזיר OK כלומר 200? יש מצב לכתובת דוגמה כזו?

                                            כשהכרתי את PowerShell אז התלהבתי שאוכל לעשות בקלות קודים לפעולות קטנות במחשב כיוצא באלו,
                                            אבל איבדתי את ההתלהבות ברגע שגיליתי את LinqPad שמאפשר להריץ בקלות C#.
                                            השפה והשימוש בסקריפטים של powershell או בש (וק"ו batch) ממש קשים לי.

                                            yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                            • yossiz
                                              yossiz @dovid נערך לאחרונה על ידי yossiz

                                              @dovid אמר בעזרה בהורדה ב PowerShell:

                                              מה זה הסיפור הזה שלח תשובה ריקה? זה לא הכי נורמלי.
                                              זה מחזיר OK כלומר 200? יש מצב לכתובת דוגמה כזו?

                                              (אני עונה במקום @yits כי אני יודע באיזה אתר מדובר)
                                              כן, זה מחזיר 200... זה באמת לא הכי נורמלי, אבל מה לעשות... ¯/_(ツ)_\¯

                                              Y תגובה 1 תגובה אחרונה תגובה ציטוט 3
                                              • Y
                                                yits @yossiz נערך לאחרונה על ידי

                                                @yossiz @yossiz
                                                עובד לי מצוין (עם הפתרון של @yossiz).

                                                תגובה 1 תגובה אחרונה תגובה ציטוט 2
                                                • 1 / 1
                                                • First post
                                                  Last post
                                                בא תתחבר לדף היומי!