

以下のサイトに記載のコードで、意味が分からない部分があります。  
なぜ `$response` の `Forms[0]` を代入していますか？どういう意味があるのでしょうか？

[Form posts with PowerShell](https://blog.csmac.nz/post/formpost-with-
powershell/)

>
[code]

>     $form = $response.Forms[0]
>  
[/code]

また、以下のコードはエラーになります。なぜでしょうか？

[code]

    $response = "aaa"
    $form = $response.Form[0]
    
[/code]


CC BY-SA 4.0
2022-12-29T08:14:51.563
93086
2022-12-30T13:11:26.187
2022-12-30T07:56:17.497
3060
56253
question
powershell
PowerShellでInvoke-WebRequestの結果に対しForms[0]とは何ですか？


$myUrlのセッションを保存する方法、フォームを投稿する方法としての$responseだからではないでしょうか。

できるかどうかわかりませんが、SessionValueを渡してusernameにaaaを代入する。


CC BY-SA 4.0
2022-12-29T08:34:25.597
93087
2022-12-30T13:11:26.187
2022-12-30T13:11:26.187
50767
50767
93086
answer


直前のコードが重要です。

[code]

    $response = Invoke-WebRequest -Uri $myUrl -Method GET -SessionVariable mySession
    
    $form = $response.Forms[0]
    
[/code]

とあります。ここで [`Invoke-WebRequest`](https://learn.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.utility/invoke-
webrequest?view=powershell-7.3)
が何を出力するコマンドレットなのかが重要です。ドキュメントの[メモ](https://learn.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.utility/invoke-
webrequest?view=powershell-7.3#notes)の項目には

> PowerShell 6.0.0 Invoke-WebRequest 以降では、基本的な解析のみがサポートされています。

とあるように、6.0以降と6.0未満とで挙動が異なります。それを踏まえて、[出力](https://learn.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.utility/invoke-
webrequest?view=powershell-7.3#outputs)を参照すると

> [`BasicHtmlWebResponseObject`](https://learn.microsoft.com/ja-
> jp/dotnet/api/microsoft.powershell.commands.basichtmlwebresponseobject?view=powershellsdk-7.2.0)

とあり、6.0未満である[5.1の出力](https://learn.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.utility/invoke-
webrequest?view=powershell-5.1#outputs)を参照すると

> [`HtmlWebResponseObject`](https://learn.microsoft.com/ja-
> jp/dotnet/api/microsoft.powershell.commands.htmlwebresponseobject?view=powershellsdk-1.1.0)

とメモの通り、出力内容に仕様変更があることがわかります。それぞれのリンク先をみるとわかりますが、5.1が出力する`HtmlWebResponseObject`には[`Forms`プロパティ](https://learn.microsoft.com/ja-
jp/dotnet/api/microsoft.powershell.commands.htmlwebresponseobject.forms?view=powershellsdk-1.1.0#microsoft-
powershell-commands-htmlwebresponseobject-
forms)が存在しますが、7.2が出力する`BasicHtmlWebResponseObject`には存在しません。

質問者さんが参照されたドキュメントはPowerShell
5.1を対象に記述されたものでしょう。実際、投稿日は2016/06/27となっていますが、PowerShell Core
6.0.0のリリースは2018/01ですし。


CC BY-SA 4.0
2022-12-29T08:46:17.907
93088
2022-12-29T08:46:17.907
4236
93086
answer