การใช้ PowerShell 4.0 และ Invivo-RestMethod cmdlet ฉันมีปัญหากับตัวเลือก -OutFile และ -PassThru เมื่อใดก็ตามที่ฉันเพิ่มตัวเลือก -PassThru ไฟล์ -OutFile ของฉันจะถูกสร้างขึ้นแต่เนื้อหาว่างเปล่า!
ตามเอกสารประกอบ Invivo-RestMethod ทั้งไฟล์เอาท์พุตและอ็อบเจ็กต์ไปป์ไลน์ควรจะพร้อมใช้งานเมื่อใช้ตัวเลือกเหล่านี้ร่วมกัน "-OutFile บันทึกเนื้อหาการตอบสนองในไฟล์เอาต์พุตที่ระบุ [...] หากต้องการส่งผลลัพธ์ไปยังไฟล์และไปป์ไลน์ ให้ใช้พารามิเตอร์ Passthru"
นี่คือ การทดสอบเพื่อทำซ้ำปัญหาที่ฉันมี ที่นี่ฉันกำลังเรียก API ที่เหลือที่พยายามทั้งบันทึกการตอบสนองต่อไฟล์และดีซีเรียลไลซ์ลงในวัตถุ PowerShell
"POWERSHELL VERSION $($host.Version.ToString())"
$date = Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt" -PassThru
Get-Content "OutFile.txt"
# FILE IS EMPTY!!! PASSTHRU SEEMS TO RESULT IN EMPTY FILE
$date
# powershell object has the date received from api
ต่อไปนี้เป็นการทดสอบสองรายการเพื่อตรวจสอบการทำงานปกติของ Invivo-RestMethod โดยไม่มีตัวเลือก PassThru
# ... Test # 1, call rest api and deserialize into powershell object
$date = Invoke-RestMethod "http://date.jsontest.com"
$date
# Output shows the date retrieved from sample restful service
# ... Test # 2, call rest api and save response body directly to a file
Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt"
Get-Content "OutFile.txt"
# Output shows contents of rest api response body (json text)
ฉันคิดว่าการทดสอบเหล่านี้ควรช่วยให้ผู้อื่นเห็นปัญหาที่ฉันมี คำถามของฉันคือ มีบางอย่างที่ฉันขาดหายไปในการทำงานนี้หรือไม่ หรือนี่อาจเป็นข้อบกพร่องของ cmdlet หรือไม่ ฉันใช้ Google เล็กน้อยเพื่อหาวิธีแก้ปัญหาและไม่มีรายงานที่ชัดเจนเกี่ยวกับปัญหานี้ ฉันต้องการใช้ -OutFile เป็นส่วนหนึ่งของวิธีแก้ปัญหาสำหรับปัญหา Invivo-RestMethod อื่นที่เกี่ยวข้องกับการเข้ารหัสเนื้อหาตามที่อธิบายไว้ที่ ข้อผิดพลาด? เรียกใช้ข้อมูล RestMethod และ UTF-8 ตัวเลือก -PassThru มีประโยชน์สำหรับฉันในการดูข้อมูลที่ส่งคืน และยุติการวนซ้ำในชุดผลลัพธ์ odata ที่มีคำขอหลายคำขอ (เพจ)
Tee-Object
- person BenH   schedule 25.03.2017Invoke-RestMethod
ตัดคำInvoke-WebRequest
ซึ่งได้มาจากWebRequestPSCmdlet
โค้ดนั้นมีตัวแปรชื่อShouldSaveToOutFile
ซึ่งจะตรวจสอบว่าคุณได้ระบุชื่อไฟล์หรือไม่ และShouldWriteToPipeline
เป็น(!ShouldSaveToOutFile || PassThru)
ดูเหมือนว่าจะตั้งใจทำงานอย่างที่คิด ไฟล์ถ้าคุณตั้งชื่อหนึ่งไปป์ไลน์อื่น ทั้งสองอย่างถ้าคุณใช้ outfile และ passthru - person TessellatingHeckler   schedule 25.03.2017if (ShouldWriteToPipeline)
และif (ShouldSaveToOutFile)
ลิงก์เหล่านี้มีไว้สำหรับโค้ดโอเพ่นซอร์ส PSv6... ดังนั้นอาจเป็นข้อบกพร่องในเวอร์ชัน 4 และได้รับการแก้ไขแล้ว - person TessellatingHeckler   schedule 25.03.2017irm https://httpbin.org/get?q=1♫
แล้วโน้ตดนตรีก็กลับมาที่คอนโซล ส่วนหัวที่ส่งกลับมีContent-Type: application/json
อีกอันหนึ่งirm http://httpbin.org/encoding/utf8
ส่งส่วนหัวContent-Type: text/html; charset=utf-8
และยูนิโค้ดผ่านมาตกลง หาก REST ของคุณบอกว่า utf8... - person TessellatingHeckler   schedule 25.03.2017Invoke-RestMethod "http://date.jsontest.com" -PassThru -OutFile .\Out2.txt | Out-File .\Out.txt
- person SavindraSingh   schedule 09.07.2018