首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell v2 : WebClient/UploadString永不连接

powershell v2 : WebClient/UploadString永不连接
EN

Stack Overflow用户
提问于 2014-07-10 18:14:28
回答 2查看 2.1K关注 0票数 0

使用powershell v2和普什佩尔,我尝试在修改文件时发送推送通知。

代码语言:javascript
复制
$folder = 'c:\path\to\file'
$filter = '*.*'
$user = "pushbullet_token"
$url = "https://api.pushbullet.com/v2/pushes"

$fsw = New-Object IO.FileSystemWatcher $folder, $filter
$fsw.IncludeSubdirectories = $true
$fsw.NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    $name = $Event.SourceEventArgs.Name
    $path = $Event.SourceEventArgs.FullPath

Out-File -FilePath c:\path\to\file\outlog.txt -Append -InputObject "$path"

    $title = $path
    Add-Type -AssemblyName System.Web
    $title = [System.Web.HttpUtility]::UrlEncode($title)
    $data =  "type=note&title=" + $title + "&body=body"

    $webclient = new-object System.Net.WebClient
    $webclient.Credentials = new-object System.Net.NetworkCredential($user, "")

Out-File -FilePath c:\path\to\file\outlog.txt -Append -InputObject "$data"

    $result = $webclient.UploadString($url, "POST", $data)

Out-File -FilePath c:\path\to\file\outlog.txt -Append -InputObject "$result"

}
#Unregister-Event FileCreated

为了检查脚本,outlog.txt文件是写的,但是只写了两个第一条消息,并且从未提交通知。

当我手动启动uploadstring

代码语言:javascript
复制
$user = "pushbullet_token"
$url = "https://api.pushbullet.com/v2/pushes"
$data = "type=note&title=title&body=body"
$webclient = new-object System.Net.WebClient
$webclient.Credentials = new-object System.Net.NetworkCredential($user, "")
$result = $webclient.UploadString($url, "POST", $data)

工作顺利。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-11 03:09:14

全局变量$url在事件处理程序脚本块中不可用。更改注册表-ObjectEvent,如下所示:

代码语言:javascript
复制
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -MessageData $url -Action {
    $name = $Event.SourceEventArgs.Name
    $path = $Event.SourceEventArgs.FullPath
    $url  = $Event.MessageData
    ...
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-15 17:25:03

呼叫$webclient.UploadString(.)在事件处理程序中,抛出一个异常,该异常终止正在运行的EventJob上下文。您可以通过键入以下内容来验证:

代码语言:javascript
复制
Get-Job 

寻找失败的工作。然后,您可以对失败的作业执行接收-作业,以获得错误消息。可能是身份验证错误。通过放置有效的身份验证令牌,我能够让您的代码正常工作。

如果您想让事件处理程序继续,即使在发生错误时,也必须使用try/catch,例如:

代码语言:javascript
复制
$result = try { $webclient.UploadString($url, "POST", $data) } 
          catch { $_.Exception.InnerException.Response }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24683577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档