Я могу нормально запустить эту функцию в интерактивном режиме. Когда я помещаю это в запланированную задачу, это терпит неудачу. Обычно он возвращает «ОК», и я бегу с логикой оттуда. $ RequestMessage содержит 2 переменные для имени пользователя и пароля, которые объявлены в верхней части скрипта.
Function Invoke-PingSG
{
PARAM
(
[parameter(Mandatory=$true)]
[string]$Uri,
[parameter(Mandatory=$true)]
[string]$SOAPAction,
[parameter(Mandatory=$true)]
[xml]$RequestMessage
)
$Request = [System.Net.WebRequest]::Create($Uri)
$Request.Headers.Add("SOAPAction","`"REDACTED$SOAPAction`"")
$Request.ContentType = 'text/xml;charset="utf-8"'
$Request.Method = "POST"
$Request.KeepAlive = $true
$RequestStream = $Request.GetRequestStream()
$RequestMessage.Save($RequestStream)
$RequestStream.Close()
try
{
$Response = $Request.GetResponse()
$ResponseStream = $Response.GetResponseStream()
$Reader = [System.IO.StreamReader]($ResponseStream)
$XmlReturned = [xml]$Reader.ReadToEnd()
$ResponseStream.Close()
}
catch [System.Net.WebException]
{
$Response = $_.Exception
}
RETURN @($Response,$XmlReturned)
}
$RequestMessage = [xml]"<SOAP-ENV:Envelope xmlns:SOAP-ENV=`"http://schemas.xmlsoap.org/soap/envelope/`"
xmlns:xsd=`"http://www.w3.org/2001/XMLSchema`" xmlns:xsi=`"http://www.w3.org/2001XMLSchema-instance`">
<SOAP-ENV:Header>
<wsse:Security xmlns:wsse=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd`"
xmlns:wsu=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd`"><wsse:UsernameToken>
<wsse:Username>$AU</wsse:Username>
<wsse:Password Type=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText`">
$AUP</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body>REDACTEDSTUFF</SOAP-ENV:Body></SOAP-ENV:Envelope>"
$SendTest = Invoke-PingSG -Uri http://some.url -SOAPAction "Ping" -RequestMessage $RequestMessage -ErrorAction SilentlyContinue
$ ($ SendTest [0] .StatusCode приведет к OK.
Когда я добавляю некоторые записи, я получаю
TerminatingError (Invoke-WebRequest): ..... ID3242: маркер безопасности не может быть аутентифицирован или авторизован ......
Есть идеи? Я также попробовал
$SendTest = Invoke-WebRequest http://some.url -Method post -ContentType 'text/xml' -Body $RequestMessage -Headers $headers -ErrorAction SilentlyContinue
, который работает в интерактивном режиме, но не в запланированной задаче.
Действие задачи:
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
и аргументы:
-PecicyPolicy Bypass -Файл C: \ Scripts \ myscript.ps1