2 votes

Absence de "}" de fermeture dans un bloc d'instructions ou une définition de type lors de l'exécution dans Powershell

Je suis novice en matière de Powershell. Lorsque j'essaie d'exécuter le code ci-dessous, j'obtiens l'erreur suivante :

"Absence de '}' fermant dans un bloc d'énoncés ou une définition de type".

Voici le code et je ne suis pas sûr de savoir ce que j'ai raté.

$path = "C:\Users\Dr.Salya\Downloads"
$filename = "rateonlyl-455.zip"

$url = "https://vertexinc.custhelp.com/app/utils/login_form"
$url2 = "https://download-ie.flexnetoperations.com/512175/1386/77/17129077/rateonlyl-455.zip?ftpRequestID=2321180473&server=download-ie.flexnetoperations.com&dtm=DTM20200820125043ODA0MDU5NDEz&authparam=1597953043_bf5ca04b9a74eeb53a272c20ea148517&ext=.zip/"

$ie = New-Object -com InternetExplorer.Application

$ie.visible = $true
$ie.silent = $false

$ie.navigate("$url")

while($ie.ReadyState -ne 4){start-sleep -m 100}
if ($ie.document.url -Match "invalidcert"){
$sslbypass=$ie.Document.getElementsByTagName("a") | where-object {$_.id -eq "overridelink"}
    $sslbypass.click()
    start-sleep -s 5
    }

$ie.Document.IHTMLDocument3_getElementById("username").click()
$ie.Document.IHTMLDocument3_getElementById("username").value ='********'
$ie.Document.IHTMLDocument3_getElementById("password").click()
$ie.Document.IHTMLDocument3_getElementById("password").value ='1234'
$ie.Document.IHTMLDocument3_getElementById("").click()

start-sleep 5

$ie.navigate($url2)

start-sleep 10

$ie.Document.body.outerHTML | Out-File -FilePath $path/$filename

Erreur :

You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:22 char:1
+ $ie.Document.IHTMLDocument3_getElementById("username").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:23 char:1
+ $ie.Document.IHTMLDocument3_getElementById("username").value ='nnaisv ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:24 char:1
+ $ie.Document.IHTMLDocument3_getElementById("password").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:25 char:1
+ $ie.Document.IHTMLDocument3_getElementById("password").value ='Vertex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:26 char:1
+ $ie.Document.IHTMLDocument3_getElementById("").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

0voto

postanote Points 3762

Vous devez parcourir la page pour vous assurer que vous obtenez le bon objet/élément et le faire un cas d'utilisation à la fois. Vous devez également vérifier si l'objet/élément possède les propriétés et les méthodes dont vous avez besoin pour résoudre votre cas d'utilisation.

Par exemple, il suffit de faire fonctionner le système de connexion.

# $path     = "C:\Users\Dr.Salya\Downloads"
# $filename = "rateonlyl-455.zip"

$url  = "https://vertexinc.custhelp.com/app/utils/login_form"
# $url2 = "https://download-ie.flexnetoperations.com/512175/1386/77/17129077/rateonlyl-455.zip?ftpRequestID=2321180473&server=download-ie.flexnetoperations.com&dtm=DTM20200820125043ODA0MDU5NDEz&authparam=1597953043_bf5ca04b9a74eeb53a272c20ea148517&ext=.zip/"

$ie = New-Object -com InternetExplorer.Application

$ie.visible = $true
$ie.silent = $false
$ie.navigate($url)
while($ie.ReadyState -ne 4){start-sleep -m 100}

if ($ie.document.url -Match "invalidcert")
{
    $sslbypass = $ie.Document.getElementsByTagName('a') | 
                 where-object {$_.id -eq "overridelink"}
    $sslbypass.click()
    start-sleep -s 5
}

$ie.Document.forms | 
Select-Object className, id, tagName, innerText, outerText 
# Results
<#
className : rn_OpenLoginForm rn_OAuthForm
id        : rn_OpenLogin_6_Info
tagName   : FORM
innerText :  

            What will happen:
            When you click on this button you will be taken to Yahoo. 
            Once you log in, Yahoo will verify you and send you back here where 
            you'll be logged in! 
outerText :  

            What will happen:
            When you click on this button you will be taken to Yahoo. 
            Once you log in, Yahoo will verify you and send you back here where 
            you'll be logged in! 

className : 
id        : rn_LoginForm_7_Form
tagName   : FORM
innerText : Username (Your email address)

            Password

outerText : Username (Your email address)

            Password
#>

$ie.Document.forms.item('rn_LoginForm_7_Form') | 
Select-Object -Property className, Name, id, Type, Value, ie9_tagName | 
Format-Table -AutoSize
# Results
<#
className name             id                      type     value  ie9_tagName
--------- ----             --                      ----     -----  -----------
          Contact.Login    rn_LoginForm_7_Username text            INPUT      
          Contact.Password rn_LoginForm_7_Password password        INPUT      
                           rn_LoginForm_7_Submit   submit   Log In INPUT 
#>

$ie.Document.getElementById('rn_LoginForm_7_Username').Value = 'SomeUserName'
$ie.Document.getElementById('rn_LoginForm_7_Password').Value = 'Password'
$ie.Document.getElementById('rn_LoginForm_7_Submit').Click()

... puis passer à la page suivante, s'il y en a une, comme le fait ce site. Cependant, comme je n'ai pas de compte à utiliser sur ce site, je ne peux pas exécuter d'autres actions. Pourtant, la simple extraction d'une liste de liens, même à partir de la page de connexion, serait la même pour toute page suivante.

$ie.Document.links | 
ForEach-Object {
[PSCustomObject]@{
    className   = $PSItem.className
    tagName     = $PSItem.tagName
    innerText   = $PSitem.innerText
    outerText   = $PSitem.outerText
    href        = $PSItem.href 
    ClickMethod = $PSItem.Click
}}

# Results
<#

className   : 
tagName     : A
innerText   :  | myVertex
outerText   :  | myVertex
href        : javascript:void
ClickMethod : void click ()

className   : rn_LoginProvider rn_Yahoo
tagName     : A
innerText   : Yahoo
outerText   : Yahoo
href        : javascript:void(0)
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Forgot your password?
outerText   : Forgot your password?
href        : https://vertexinc.custhelp.com/app/utils/account_assistance/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQvZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRF
              TFZOVDVPU3JNYXJWeWV3SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNYRDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Sign Up
outerText   : Sign Up
href        : https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQv
              ZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRFTFZOVDVPU3JNYXJWeWV3SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNY
              RDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   :  
outerText   :  
href        : https://vertexinc.custhelp.com/app/home/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQvZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRFTFZOVDVPU3JNYXJWeWV3
              SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNYRDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Privacy Policy
outerText   : Privacy Policy
href        : javascript:showPrivacyPolicy();
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Terms of Use
outerText   : Terms of Use
href        : javascript:showTerms();
ClickMethod : void click ()

className   : 
tagName     : A
innerText   :   Contact: 1-800-281-1900
outerText   :   Contact: 1-800-281-1900
href        : tel:1-800-281-1900
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.facebook.com/vertexinc1/
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://twitter.com/vertexinc
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.linkedin.com/company/vertex-inc.
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.youtube.com/user/vertexinc
ClickMethod : void click ()         
#>

$ie.Document.links | 
Select-Object -Property outerText, href
# Results
<#
outerText             href                                                                                           
---------             ----                                                                                           
 | myVertex           javascript:void                                                                                
Yahoo                 javascript:void(0)                                                                             
Forgot your password? https://vertexinc.custhelp.com/app/utils/account_assistance                                    
Sign Up               https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation
                      https://vertexinc.custhelp.com/app/home/                                                       
Privacy Policy        javascript:showPrivacyPolicy();                                                                
Terms of Use          javascript:showTerms();                                                                        
  Contact: 1-800-2... tel:1-800-281-1900                                                                             
                      https://www.facebook.com/vertexinc1/                                                           
                      https://twitter.com/vertexinc                                                                  
                      https://www.linkedin.com/company/vertex-inc.                                                   
                      https://www.youtube.com/user/vertexinc 
#>

$ie.Document.getElementsByTagName('A')[4] | 
ForEach-Object {
[PSCustomObject]@{
    className   = $PSItem.className
    id          = $PSItem.id
    tagName     = $PSItem.tagName
    innerText   = $PSitem.innerText
    outerText   = $PSitem.outerText
    href        = $PSItem.href 
    ClickMethod = $PSItem.Click
}}
# Results
<#
className   : 
id          : 
tagName     : A
innerText   : Sign Up
outerText   : Sign Up
href        : https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation
ClickMethod : void click ()
#>

($ie.Document.getElementsByTagName('A') | 
Where outerText -eq 'Forgot your password?').Click()

($ie.Document.getElementsByTagName('A') | 
Where outerText -eq 'Sign Up').Click()

Enfin, vous pouvez automatiser les sites qui le permettent. Certains sites n'autorisent pas l'automatisation de leurs propriétés (ou d'une partie d'entre elles), ils les codent activement pour l'empêcher.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X