Zum Inhalt wechseln


Foto

Powershell Webrequest


  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1 Matze1708

Matze1708

    Member

  • 388 Beiträge

 

Geschrieben 07. März 2017 - 18:05

hallo zusammen,

 

ich habe ein Skript mit dem ich einen Webrequest zu einem Skript herstelle. Das Skript erledigt mit ein paar Sachen für eine Telefonanlage.

 

Das Skript läuft auf einem IIS8.5 mit PHP 7

 

aktuell ist die Site noch Anonym zuerreichen. Daher läuft mein Skript auch noch problemlos. Als wir Heute auf Windows Authentifizeirung umstellen .. War schnell klar das mein Skript nicht mehr so läuft wie es soll.

param(
[string]$HL)



$urlpart1 = "http://xxxx/cfw_Masse.php?HL="
$urlCall = $urlpart1+$HL
 

$httprequest=[system.Net.HttpWebRequest]::Create($urlCall);
$data = $httprequest.getresponse();
$stat = $data.statuscode;
$data.Close(); 

Im Netz habe ich was schönes gegoogelt und etwas angepasst, da mir das Skript sogar einen Status zurück gibt. Ob mir das was in der Aufgabenplanung bringt weiss ich nicht.

param(
[string]$HL)



$urlpart1 = "http://sastest.uni-gruppe.intra/cfw/cfw_Masse.php?HL="
$urlCall = $urlpart1+$HL

$username = "User"
$pw = "Passwort"
$domain = "Domain"

$req = [system.Net.WebRequest]::Create($urlCall)
#$req.Credentials = new NetworkCredential($username, $pwd, $domain); 
$req.UseDefaultCredentials = $true
try
{
    $res = $req.GetResponse()
}
catch [System.Net.WebException]
{
    $res = $_.Exception.Response
}

$int = [int]$res.StatusCode
$status = $res.StatusCode
return "$int $status"

Aber er wirft mir einen Fehler mit dem new Networkcredential aus.

 

 

 

new : Die Benennung "new" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob

der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.

In C:\PS_Skript\umleitungLogin.ps1:14 Zeichen:20

+ $req.Credentials = new NetworkCredential($username, $pwd, $domain);

+ ~~~

+ CategoryInfo : ObjectNotFound: (new:String) [], CommandNotFoundException

+ FullyQualifiedErrorId : CommandNotFoundException

 

 

habt ihr da eine Idee für mich wie ich das passend hin bekomme?

 

Vielen Dank Gruß Matthias



#2 Matze1708

Matze1708

    Member

  • 388 Beiträge

 

Geschrieben 08. März 2017 - 07:07

Hallo,

 

ich habe es!

 

ALso zumindest der Code ist jetzt funktional.

 

Es muss heißen

param(
[string]$HL)



$urlpart1 = "http://XXX/cfw/cfw_Masse.php?HL="
$urlCall = $urlpart1+$HL


$username = "User"
$password = "PASS" | ConvertTo-SecureString -asPlainText -Force

$req = [system.Net.WebRequest]::Create($urlCall)
$req.Credentials = new-object System.Net.NetworkCredential($username, $password); 
#$req.UseDefaultCredentials = $true
try
{
    $res = $req.GetResponse()
}
catch [System.Net.WebException]
{
    $res = $_.Exception.Response
}

$int = [int]$res.StatusCode
$status = $res.StatusCode
return "$int $status"

Was leider noch nicht geht. Aber vielleicht gibt's das auch nicht.

 

Das ich im Verlauf vom Taskplaner erkennen kann ob der AUfruf ok war oder nicht ....Sprich den return Code in dem Verlauf anzeigen lassen.



#3 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 08. März 2017 - 07:24

Moin,

 

schön, danke für die Rückmeldung. Bezüglich des Rückgabewerts: Es dürfte doch viel einfacher sein, den Status in eine eigene Logdatei zu schreiben. Die kannst du dann auch leichter auswerten, und das Format kannst du auch nach eigenem Bedarf steuern.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#4 magheinz

magheinz

    Newbie

  • 1.328 Beiträge

 

Geschrieben 08. März 2017 - 08:21

Was leider noch nicht geht. Aber vielleicht gibt's das auch nicht.

 

Das ich im Verlauf vom Taskplaner erkennen kann ob der AUfruf ok war oder nicht ....Sprich den return Code in dem Verlauf anzeigen lassen.

Bekommst du eine Fehlermedlung?

Eventuell muss die Variable $res vor dem try deklariert werden.


Bearbeitet von magheinz, 08. März 2017 - 08:29.


#5 Matze1708

Matze1708

    Member

  • 388 Beiträge

 

Geschrieben 14. März 2017 - 08:16

Hallo,

 

ich habe noch mal eine kleine Verständnis Frage,

 

zu erst, Das Skript logt jetzt immer mit, dazu musste ich noch HTTP Authentifizierung einfügen.

$urlpart1 = "http://xxxxx/cfw/cfw_Masse.php?HL="
$urlCall = $urlpart1+$HL


$username = "XXXX"
$password = "XXX" | ConvertTo-SecureString -asPlainText -Force

$req = [system.Net.WebRequest]::Create($urlCall)
$req.Credentials = new-object System.Net.NetworkCredential($username, $password); 
#$req.UseDefaultCredentials = $true
try
{
    $res = $req.GetResponse()
}
catch [System.Net.WebException]
{
    $res = $_.Exception.Response
}

$int = [int]$res.StatusCode
$status = $res.StatusCode




$LogFile = "C:\PS_Skript\log.log"
$FileExists = Test-Path $LogFile
    $DateNow = Get-Date -Format "dd.MM.yyyy HH:mm:ss" # Ermittelt das aktuelle Datum mit diesem Syntax 01.10.2013 10:00
    $FileInp = $DateNow + ' | ' + "Aufruf Umleitungstelefone, Status Code: "+$int+" "+$status                          # Setzt die Zeile für unser Logfile zusammen
    If ($FileExists -eq $True){ # Wenn dir Datei existiert reinschreiben
        Add-Content $LogFile -value $FileInp  # Zeile hinten an die vorhanden Einträge anhängen
    } else {
       New-Item $Logfile -type file # Wenn dir Datei nicht existiert anlegen
       Add-Content $LogFile -value $FileInp # und reinschreiben
    }



return "$int $status"


Was ich aber gern machen würde, das ich 2 Seiten über dieses Skript aufrufe. Geht das? Wie muss ich das tun?