0

PowerShell を使用して IE ナビゲーション全般を自動化する方法を理解しようとしています。http://scriptolog.blogspot.com/2007/01/automated-web-forms.html でサンプル スクリプトを見つけました

コードは次のとおりです。

function Login-GMail{ 
    param(
        [string]$uname,
        [string]$url="http://www.gmail.com",
        [bool]$cookie=$false 
    ) 

    $creds = get-credential $uname 
    $pass = $creds.GetNetworkCredential().Password 
    $ie=new-object -com internetexplorer.application 
    $ie.visible=$true 
    $ie.navigate($url) 

    while($ie.ReadyState -ne 4){start-sleep -m 100}

    $ie.document.getElementbyId("Email").value=$creds
    $ie.document.getElementbyId("Passwd").value=$pass 
    $ie.document.getElementbyName("PersistentCookie") | foreach {$_.checked=$cookie}
    $ie.document.getElementbyId("gaia_loginform").submit()

} 
Login-Gmail

コードは完全に問題ないように見えますが、期待どおりに動作しません

これをコマンド ライン、つまり C:\sandbox\gmail.ps1 me@gmail.com で実行すると、エラーが発生します。

Set-Location : A positional parameter cannot be found that accepts argument 'me@gmail.com'.
At line:1 char:3
+ cd <<<<  c:\sandbox\gmail.ps1 p...@gmail.com
    + CategoryInfo          : InvalidArgument: (:) [Set-Location], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

これを Powershell GUI で実行して緑色の矢印を押すと、ポップアップ ボックスが表示され、ユーザー名とパスワードを要求されます。ただし、gmail.com を開くと、ユーザー名のテキスト ボックスに「System.Management.Automation.PSCredential」が事前入力され、次のエラーが表示されます。

Method invocation failed because [mshtml.HTMLDocumentClass] doesn't contain a method named 'getElementbyName'.
At C:\sandbox\gmail.ps1:18 char:34
+     $ie.document.getElementbyName <<<< ("PersistentCookie") | foreach {$_.checked=$cookie}
    + CategoryInfo          : InvalidOperation: (getElementbyName:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

これをトラブルシューティングする方法は?

編集:

@ゴユイクス

パラメータリストに変更を加え、追加しました

Login-Gmail -uname me@gmail.com

そして私は削除しました

$creds=get-credential $uname

エラーが発生します

You cannot call a method on a null-valued expression.
At C:\sandbox\gmail.ps1:9 char:40
+     $pass = $creds.GetNetworkCredential <<<< ().Password 
    + CategoryInfo          : InvalidOperation: (GetNetworkCredential:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Method invocation failed because [mshtml.HTMLDocumentClass] doesn't contain a method named 'getElementbyName'.
At C:\sandbox\gmail.ps1:18 char:34
+     $ie.document.getElementbyName <<<< ("PersistentCookie") | foreach {$_.checked=$cookie}
    + CategoryInfo          : InvalidOperation: (getElementbyName:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

外すと

$ie.document.getElementbyName("PersistentCookie") | foreach {$_.checked=$cookie}

しかし、含める

$creds = get-credential $uname

次に、me@gmail.com があらかじめ入力されたユーザー名を含むポップアップが表示されます。パスワードを入力して [OK] を押すと、gmail appaers とユーザー名を含む Web ページに事前入力されます。

System.Management.Automation.PSCredential

しかし、ここにはエラーはありません。

自動的に gmail を開いてアカウントにログインするようにコードを修正する方法。これまでのコードは次のとおりです。

function Login-GMail{ 
    param(
        [Parameter(Mandatory=$True,Position=1)][string]$uname,
        [Parameter(Mandatory=$False,Position=2)][string]$url="http://www.gmail.com",
        [Parameter(Mandatory=$False,Position=3)][bool]$cookie=$false 
    ) 

    $creds = get-credential $uname 
    $pass = $creds.GetNetworkCredential().Password 
    $ie=new-object -com internetexplorer.application 
    $ie.visible=$true 
    $ie.navigate($url) 

    while($ie.ReadyState -ne 4){start-sleep -m 100}

    $ie.document.getElementbyId("Email").value=$creds
    $ie.document.getElementbyId("Passwd").value=$pass 
    $ie.document.getElementbyId("gaia_loginform").submit()

} 
Login-Gmail -uname me@gmail.com
4

1 に答える 1